home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / master.s < prev    next >
Text File  |  1997-01-31  |  111KB  |  7,523 lines

  1.  
  2. maxscrdiv EQU 8
  3. max3ddiv EQU 5
  4. playerheight EQU 12*1024
  5. playercrouched EQU 6*1024
  6. scrheight EQU 80
  7.  
  8. ; k/j/m
  9. ; 4/8
  10. ; s/x
  11. ; b/n
  12.  
  13. xpos EQU 0    ;l
  14. zpos EQU 4    ;l
  15. zsinval EQU 8    ;w
  16. zcosval EQU 10    ;w
  17. ztox EQU 12    ;l
  18. xsinval EQU 16    ;w
  19. xcosval EQU 18    ;w
  20. xspd EQU 20    ;w
  21. zspd EQU 22    ;w
  22. mapx EQU 24    ;b
  23. mapz EQU 25    ;b
  24. whichtile EQU 26 ;b
  25. xofflight EQU 28    ;w
  26. zofflight EQU 30    ;w
  27. offlight EQU 32        ;w
  28. zlinestore EQU 34
  29. zlinedir EQU 38
  30. zposdir EQU 40
  31. zposstore EQU 42
  32. xdiststore EQU 44
  33. xdistdir EQU 46
  34. zwallfound EQU 48
  35.  
  36. xlinestore EQU 50
  37. xlinedir EQU 54
  38. xposdir EQU 56
  39. xposstore EQU 58
  40. zdiststore EQU 60
  41. zdistdir EQU 62
  42. xwallfound EQU 64
  43.  
  44.  
  45. midoffset EQU 104*4*40
  46.  
  47.  SECTION Scrn,CODE
  48. OpenLib         equ -552
  49. CloseLib        equ -414
  50.  
  51. vhposr        equ $006    
  52. vhposrl        equ $007 
  53. bltcon0        equ $40 
  54. bltcon1        equ $42
  55. bltcpt        equ $48
  56. bltbpt        equ $4c
  57. bltapt        equ $50
  58. spr0ctl        equ $142
  59. spr1ctl        equ $14a
  60. spr2ctl        equ $152
  61. spr3ctl        equ $15a
  62. spr4ctl        equ $162
  63. spr5ctl        equ $16a
  64. spr6ctl        equ $172
  65. spr7ctl        equ $17a
  66. spr0pos        equ $140
  67. spr1pos        equ $148
  68. spr2pos        equ $150
  69. spr3pos        equ $158
  70. spr4pos        equ $160
  71. spr5pos        equ $168
  72. spr6pos        equ $170
  73. spr7pos        equ $178
  74. bltdpt         equ $54
  75. bltafwm        equ $44
  76. bltalwm        equ $46
  77. bltsize         equ $58
  78. bltcmod         equ $60
  79. bltbmod         equ $62
  80. bltamod         equ $64
  81. bltdmod         equ $66
  82. diwstart        equ $8e         ; Screen hardware registers.
  83. diwstop         equ $90
  84. ddfstart        equ $92
  85. ddfstop         equ $94
  86. bplcon0         equ $100
  87. bplcon1         equ $102
  88. col0            equ $180
  89. col1            equ $182
  90. col2        equ $184
  91. col3        equ $186
  92. col4        equ $188
  93. col5        equ $18a
  94. col6        equ $18c
  95. col7        equ $18e
  96. col8            equ $190
  97. col9            equ $192
  98. col10           equ $194
  99. dmacon        equ $96
  100. dmaconr        equ $002
  101. intenar        equ $01c
  102. intena        equ $09a
  103. intreq        equ $09c
  104. intreqr        equ $01e
  105. intreqrl    equ $01f
  106. bpl1pth         equ $e0
  107. bpl1ptl         equ $e2
  108. bpl2pth        equ $e4
  109. bpl2ptl        equ $e6
  110. bpl3pth        equ $e8
  111. bpl3ptl        equ $ea
  112. bpl4pth        equ $ec
  113. bpl4ptl        equ $ee
  114. bpl5pth        equ $f0
  115. bpl5ptl        equ $f2
  116. bpl6pth        equ $f4
  117. bpl6ptl        equ $f6
  118. bpl7pth        equ $f8
  119. bpl7ptl        equ $fa
  120. bpl8pth        equ $fc
  121. bpl8ptl        equ $fe
  122. spr0pth        equ $120
  123. spr0ptl        equ $122
  124. spr1pth        equ $124
  125. spr1ptl        equ $126
  126. spr2pth        equ $128
  127. spr2ptl        equ $12a
  128. spr3pth        equ $12c
  129. spr3ptl        equ $12e
  130. spr4pth        equ $130
  131. spr4ptl        equ $132
  132. spr5pth        equ $134
  133. spr5ptl        equ $136
  134. spr6pth        equ $138
  135. spr6ptl        equ $13a
  136. spr7pth        equ $13c
  137. spr7ptl        equ $13e
  138.  
  139. ; move.l #length,d0
  140. ; moveq.l #2,d1    ; chipmem
  141. ; move.l 4.w,a6
  142. ; jsr allocmem(a6) = -198
  143.  
  144. ; tst.l d0
  145. ; beq.s ohbugger
  146. ; move.l d0,memaddr
  147.  
  148.  
  149. ; move.l 4.w,a6
  150. ; move.l memaddr,a1
  151. ; move.l #size,d0
  152. ; jsr freemem(a6) =-210
  153.  
  154.  
  155. ** This waits for the blitter to finish before allowing program
  156. ** execution to continue.
  157.  
  158. WB MACRO
  159. \@bf:
  160.  btst #6,dmaconr(a6)
  161.  bne.s \@bf
  162.  ENDM
  163.  
  164. *Another version for when d6 <> dff000
  165.  
  166. WBSLOW MACRO
  167. \@bf:
  168.  btst #6,$dff000+dmaconr
  169.  bne.s \@bf
  170.  ENDM
  171.  
  172. WT MACRO
  173. \@bf:
  174.  btst #6,(a3)
  175.  bne.s \@bd
  176.  rts
  177. \@bd: 
  178.  btst #4,(a0)
  179.  beq.s \@bf
  180.  ENDM
  181.  
  182. WTNOT MACRO
  183. \@bf:
  184.  btst #6,(a3)
  185.  bne.s \@bd
  186.  rts
  187. \@bd: 
  188.  btst #4,(a0)
  189.  bne.s \@bf
  190.  ENDM
  191.  
  192. **
  193.  
  194.  include "macros.i"
  195.  include "ab3:source/defs.i"
  196.  
  197. * Load level into buffers.
  198.  clr.b doanything
  199.  
  200.  move.l 4.w,a6
  201.  move.l #doslibname,a1
  202.  moveq #0,d0
  203.  jsr -552(a6)
  204.  move.l d0,doslib
  205.  
  206. ; bra noload
  207.  
  208.  move.l d0,a6
  209.  move.l #LDname,d1
  210.  move.l #1005,d2
  211.  jsr -30(a6)
  212.  move.l d0,LDhandle
  213.  
  214.  move.l doslib,a6
  215.  move.l d0,d1
  216.  move.l #LEVELDATA,d2
  217.  move.l #70000,d3
  218.  jsr -42(a6)
  219.  
  220.  move.l doslib,a6
  221.  move.l LDhandle,d1
  222.  jsr -36(a6)
  223.  
  224. ********
  225.  
  226.  move.l doslib,a6
  227.  move.l #LGname,d1
  228.  move.l #1005,d2
  229.  jsr -30(a6)
  230.  move.l d0,LGhandle
  231.  
  232.  move.l doslib,a6
  233.  move.l d0,d1
  234.  move.l #LEVELGRAPHICS,d2
  235.  move.l #30000,d3
  236.  jsr -42(a6)
  237.  
  238.  move.l doslib,a6
  239.  move.l LGhandle,d1
  240.  jsr -36(a6)
  241.  
  242. ********
  243.  
  244.  move.l doslib,a6
  245.  move.l #LCname,d1
  246.  move.l #1005,d2
  247.  jsr -30(a6)
  248.  move.l d0,LChandle
  249.  
  250.  move.l doslib,a6
  251.  move.l d0,d1
  252.  move.l #LEVELCLIPS,d2
  253.  move.l #50000,d3
  254.  jsr -42(a6)
  255.  
  256.  move.l doslib,a6
  257.  move.l LChandle,d1
  258.  jsr -36(a6)
  259.  
  260. *******
  261.  
  262. noload:
  263.  
  264. ********
  265.  
  266. ; move.l doslib,a6
  267. ; move.l #Prefsname,d1
  268. ; move.l #1005,d2
  269. ; jsr -30(a6)
  270. ; move.l d0,Prefshandle
  271.  
  272. ; move.l doslib,a6
  273. ; move.l d0,d1
  274. ; move.l #Prefsfile,d2
  275. ; move.l #50,d3
  276. ; jsr -42(a6)
  277.  
  278. ; move.l doslib,a6
  279. ; move.l Prefshandle,d1
  280. ; jsr -36(a6)
  281.  
  282. *******
  283.  
  284.  cmp.b #'s',Prefsfile+2
  285.  seq STEREO
  286.  
  287.  move.l doslib,d0
  288.  move.l d0,a1
  289.  move.l 4.w,a6
  290.  jsr CloseLib(a6)
  291.  
  292.  jmp stuff
  293. endstuff:
  294.  
  295.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  296.  move.w #$87c0,dmacon(a6)
  297.  move.w #$8020,dmacon(a6)
  298.  move.w intenar(a6),saveinters
  299.  move.w #$7fff,intena(a6)
  300.  move.w #$00ff,$dff09e
  301.  
  302. *** Put myself in supervisor mode
  303.  
  304.  move.l #blag,$80
  305.  trap #0
  306. ; move.l $6c,d0
  307. ; move.l #blag,$6c
  308. ; move.w #$8010,intreq(a6)
  309.  
  310.  rts
  311.  
  312. saveit: ds.l 10
  313. doslibname: dc.b 'dos.library',0
  314.  even
  315. doslib: dc.l 0
  316.  
  317. LDname: dc.b 'ab3:includes/tstlev.bin',0
  318.  even
  319. LDhandle: dc.l 0
  320. LGname: dc.b 'ab3:includes/tstlev.graph.bin',0
  321.  even
  322. LGhandle: dc.l 0
  323. LCname: dc.b 'ab3:includes/tstlev.clips',0
  324.  even
  325. LChandle: dc.l 0
  326.  
  327. Prefsname: dc.b 'ram:prefs',0
  328.  even
  329. Prefshandle: dc.l 0
  330.  
  331. Prefsfile:
  332.  dc.b 'k8nx'
  333.  ds.b 50
  334.  
  335.  even
  336.  
  337. blag:
  338. ; move.w #$10,intreq(a6)
  339. ; move.l d0,$6c
  340. ; move.w #$7fff,intena(a6)
  341.  
  342.  move.w #$20,$dff1dc
  343.  
  344.  move.l $6c,saveit
  345.  move.l #Chan0inter,$6c
  346.  jsr KInt_Init
  347.  
  348.  
  349.  
  350. ****************************
  351. * Initialize level
  352. ****************************
  353. * Poke all clip offsets into
  354. * correct bit of level data.
  355. ****************************
  356.  lea.l LEVELGRAPHICS,a0
  357.  move.l 12(a0),a1
  358.  add.l a0,a1
  359.  move.l a1,ZoneGraphAdds
  360.  move.l (a0),a1
  361.  add.l a0,a1
  362.  move.l a1,DoorData
  363.  move.l 4(a0),a1
  364.  add.l a0,a1
  365.  move.l a1,LiftData
  366.  move.l 8(a0),a1
  367.  add.l a0,a1
  368.  move.l a1,SwitchData
  369.  adda.w #16,a0
  370.  move.l a0,ZoneAdds
  371.  
  372.  lea.l LEVELDATA,a1
  373.  move.l 16(a1),a2
  374.  add.l a1,a2
  375.  move.l a2,Points
  376.  move.l 20(a1),a2
  377.  add.l a1,a2
  378.  move.l a2,FloorLines
  379.  move.l 24(a1),a2
  380.  add.l a1,a2
  381.  move.l a2,ObjectData
  382.  move.l 28(a1),a2
  383.  add.l a1,a2
  384.  move.l a2,PlayerShotData
  385.  move.l 32(a1),a2
  386.  add.l a1,a2
  387.  move.l a2,NastyShotData
  388.  move.l 36(a1),a2
  389.  add.l a1,a2
  390.  move.l a2,ObjectPoints  
  391.  move.l 40(a1),a2
  392.  add.l a1,a2
  393.  move.l a2,PLR1_Obj
  394.  move.l 44(a1),a2
  395.  add.l a1,a2
  396.  move.l a2,PLR2_Obj
  397.  move.w 14(a1),NumObjectPoints
  398.  
  399. ; bra noclips
  400.   
  401.  lea.l LEVELCLIPS,a2
  402.  moveq #0,d0
  403.  move.w 10(a1),d7    ;numzones
  404. assignclips:
  405.  move.l (a0)+,a3
  406.  add.l a1,a3    ; pointer to a zone
  407.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  408. dowholezone:
  409.  tst.w (a3)
  410.  blt.s nomorethiszone
  411.  tst.w 2(a3)
  412.  blt.s thisonenull
  413.  
  414.  move.l d0,d1
  415.  asr.l #1,d1
  416.  move.w d1,2(a3)
  417.  
  418. findnextclip:
  419.  cmp.w #-2,(a2,d0.l)
  420.  beq.s foundnextclip
  421.  addq.l #2,d0
  422.  bra.s findnextclip
  423. foundnextclip
  424.  addq.l #2,d0
  425.  
  426. thisonenull:
  427.  addq #8,a3 
  428.  bra.s dowholezone
  429. nomorethiszone:
  430.  dbra d7,assignclips
  431.  
  432.  lea (a2,d0.l),a2
  433.  move.l a2,CONNECT_TABLE
  434.  
  435. noclips:
  436.  
  437. * Put in addresses of glowything
  438.  
  439.  move.l red_des,a0
  440.  move.w (a0),d0
  441.  addq #1,d0
  442.  muls #6,d0
  443.  lea 2(a0,d0.w),a1
  444.  move.l red_des+4,a0
  445.  move.l a1,(a0)
  446.  move.w #0,(a1)
  447.  
  448.  move.l yellow_des,a0
  449.  move.w (a0),d0
  450.  addq #1,d0
  451.  muls #6,d0
  452.  lea 2(a0,d0.w),a1
  453.  move.l yellow_des+4,a0
  454.  move.l a1,(a0)
  455.  move.w #0,(a1)
  456.  
  457.  move.l green_des,a0
  458.  move.w (a0),d0
  459.  addq #1,d0
  460.  muls #6,d0
  461.  lea 2(a0,d0.w),a1
  462.  move.l green_des+4,a0
  463.  move.l a1,(a0)
  464.  move.w #0,(a1)
  465.  
  466.  move.l blue_des,a0
  467.  move.w (a0),d0
  468.  addq #1,d0
  469.  muls #6,d0
  470.  lea 2(a0,d0.w),a1
  471. ; move.l #protinit-750000,a6
  472.  move.l blue_des+4,a0
  473.  move.l a1,(a0)
  474.  move.w #0,(a1)
  475.  
  476.  
  477. ************************************
  478.  
  479.  cmp.b #'k',Prefsfile
  480.  bne.s nkb
  481.  st PLR1KEYS
  482.  clr.b PLR1PATH
  483.  clr.b PLR1MOUSE
  484.  clr.b PLR1JOY
  485. nkb:
  486.  cmp.b #'m',Prefsfile
  487.  bne.s nmc
  488.  clr.b PLR1KEYS
  489.  clr.b PLR1PATH
  490.  st PLR1MOUSE
  491.  clr.b PLR1JOY
  492. nmc:
  493.  cmp.b #'j',Prefsfile
  494.  bne.s njc
  495.  clr.b PLR1KEYS
  496.  clr.b PLR1PATH
  497.  clr.b PLR1MOUSE
  498.  st PLR1JOY
  499. njc:
  500.  
  501.  clr.b PLR1_StoodInTop
  502.  move.l #playerheight,PLR1s_height
  503.  
  504.  move.l #empty,pos1LEFT
  505.  move.l #empty,pos2LEFT
  506.  move.l #empty,pos1RIGHT
  507.  move.l #empty,pos2RIGHT
  508.  move.l #emptyend,Samp0endLEFT
  509.  move.l #emptyend,Samp1endLEFT
  510.  move.l #emptyend,Samp0endRIGHT
  511.  move.l #emptyend,Samp1endRIGHT
  512.  
  513.  move.l #nullspr,d0
  514.  move.w d0,s4l
  515.  move.w d0,s5l
  516.  move.w d0,s6l
  517.  move.w d0,s7l
  518.  swap d0
  519.  move.w d0,s4h
  520.  move.w d0,s5h
  521.  move.w d0,s6h
  522.  move.w d0,s7h 
  523.  
  524.  move.l #nullline,d0
  525.  move.w d0,n1l
  526.  swap d0
  527.  move.w d0,n1h
  528.  
  529.  move.l #Panel,d0
  530.  move.w d0,p1l
  531.  swap d0
  532.  move.w d0,p1h
  533.  move.l #Panel+40,d0
  534.  move.w d0,p2l
  535.  swap d0
  536.  move.w d0,p2h
  537.  move.l #Panel+40*2,d0
  538.  move.w d0,p3l
  539.  swap d0
  540.  move.w d0,p3h
  541.  move.l #Panel+40*3,d0
  542.  move.w d0,p4l
  543.  swap d0
  544.  move.w d0,p4h
  545.  move.l #Panel+40*4,d0
  546.  move.w d0,p5l
  547.  swap d0
  548.  move.w d0,p5h
  549.  move.l #Panel+40*5,d0
  550.  move.w d0,p6l
  551.  swap d0
  552.  move.w d0,p6h
  553.  move.l #Panel+40*6,d0
  554.  move.w d0,p7l
  555.  swap d0
  556.  move.w d0,p7h
  557.  move.l #Panel+40*7,d0
  558.  move.w d0,p8l
  559.  swap d0
  560.  move.w d0,p8h
  561.  
  562. *******************************
  563. * TIMER SCREEN SETUP
  564. ; move.l #TimerScr,d0
  565. ; move.w d0,p1l
  566. ; swap d0
  567. ; move.w d0,p1h
  568. ; move.w #$1201,Panelcon
  569.  
  570.  move.l #borders,d0
  571.  move.w d0,s0l
  572.  swap d0
  573.  move.w d0,s0h
  574.  move.l #borders+2592,d0
  575.  move.w d0,s1l
  576.  swap d0
  577.  move.w d0,s1h
  578.  move.l #borders+2592*2,d0
  579.  move.w d0,s2l
  580.  swap d0
  581.  move.w d0,s2h
  582.  move.l #borders+2592*3,d0
  583.  move.w d0,s3l
  584.  swap d0
  585.  move.w d0,s3h
  586.  
  587.  move.w #52*256+64,borders
  588.  move.w #212*256+0,borders+8
  589.  move.w #52*256+64,borders+2592
  590.  move.w #212*256+128,borders+8+2592
  591.  move.w #52*256+192,borders+2592*2
  592.  move.w #212*256+0,borders+8+2592*2
  593.  move.w #52*256+192,borders+2592*3
  594.  move.w #212*256+128,borders+8+2592*3
  595.  
  596.  move.l #FacePlace,d0
  597.  move.w d0,f1l
  598.  swap d0
  599.  move.w d0,f1h
  600.  move.l #FacePlace+32*24,d0
  601.  move.w d0,f2l
  602.  swap d0
  603.  move.w d0,f2h
  604.  move.l #FacePlace+32*24*2,d0
  605.  move.w d0,f3l
  606.  swap d0
  607.  move.w d0,f3h
  608.  move.l #FacePlace+32*24*3,d0
  609.  move.w d0,f4l
  610.  swap d0
  611.  move.w d0,f4h
  612.  move.l #FacePlace+32*24*4,d0
  613.  move.w d0,f5l
  614.  swap d0
  615.  move.w d0,f5h
  616.  
  617.  move.l #PanelCop,d0
  618.  move.w d0,pcl1
  619.  move.w d0,pcl2
  620.  swap d0
  621.  move.w d0,pch1
  622.  move.w d0,pch2
  623.  
  624.  move.l #bigfield,d0
  625.  move.w d0,ocl
  626.  swap d0
  627.  move.w d0,och
  628.  
  629.  bset.b #1,$bfe001
  630.  
  631.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  632.  move.w #$00ff,$dff09e
  633.  
  634. ; move.l #Blurbfield,$dff080
  635.  
  636.  move.w #0,d0
  637.  
  638.  move.l #scrn,d0
  639.  move.w d0,pl1l
  640.  swap d0
  641.  move.w d0,pl1h
  642.  
  643.  move.l #scrn+40,d0
  644.  move.w d0,pl2l
  645.  swap d0
  646.  move.w d0,pl2h
  647.  
  648.  move.l #scrn+80,d0
  649.  move.w d0,pl3l
  650.  swap d0
  651.  move.w d0,pl3h
  652.  
  653.  move.l #scrn+120,d0
  654.  move.w d0,pl4l
  655.  swap d0
  656.  move.w d0,pl4h
  657.  
  658.  move.l #scrn+160,d0
  659.  move.w d0,pl5l
  660.  swap d0
  661.  move.w d0,pl5h
  662.  
  663.  move.l #scrn+200,d0
  664.  move.w d0,pl6l
  665.  swap d0
  666.  move.w d0,pl6h
  667.  
  668.  move.l #scrn+240,d0
  669.  move.w d0,pl7l
  670.  swap d0
  671.  move.w d0,pl7h
  672.  
  673.  move.l #healthpal,a5
  674.  move.l #colbars,a0
  675.  move.l #colbars2,a2
  676.  move.w #scrheight-1,d0
  677.  move.l #0,d6
  678.  move.w #0,d3
  679.  move.w #$2bdf,startwait
  680.  move.w #$2d01,endwait
  681. fillcop
  682.  move.w #$180,d1
  683.  
  684.  move.l a0,a1
  685.  move.l a2,a3
  686.  move.w #$10c,(a1)+
  687.  move.w #$10c,(a3)+
  688.  move.w d3,(a1)+
  689.  move.w d3,(a3)+
  690.  eor.w #$8000,d3
  691.  
  692.  move.w #$106,(a1)+
  693.  move.w #$106,(a3)+
  694.  move.w #$2c42,d5
  695.  or.w d3,d5
  696.  and.w #$fffe,d5
  697.  move.w d5,(a1)+
  698.  move.w d5,(a3)+
  699.  bsr do32
  700.  
  701.  move.w #$106,(a1)+
  702.  move.w #$106,(a3)+
  703.  move.w #$4c42,d5
  704.  or.w d3,d5
  705.  and.w #$fffe,d5
  706.  move.w d5,(a1)+
  707.  move.w d5,(a3)+
  708.  bsr do32
  709.  
  710.  move.w #$106,(a1)+
  711.  move.w #$106,(a3)+
  712.  move.w #$6c42,d5
  713.  or.w d3,d5
  714.  and.w #$fffe,d5
  715.  move.w d5,(a1)+
  716.  move.w d5,(a3)+
  717.  bsr do32
  718.  
  719. **********************************
  720.  
  721.  cmp.b #'s',option
  722.  bra.s smallscrn
  723.  
  724.  move.w startwait,(a1)+
  725.  move.w #$fffe,(a1)+
  726.  move.w endwait,(a1)+
  727.  move.w #$ff00,(a1)+
  728.  move.w startwait,(a3)+
  729.  move.w #$fffe,(a3)+
  730.  move.w endwait,(a3)+
  731.  move.w #$ff00,(a3)+
  732.  
  733.  
  734.  add.w #$300,startwait
  735.  add.w #$300,endwait
  736.  
  737. smallscrn: 
  738.  
  739.  move.l #$1060c42,(a1)+
  740.  move.l #$1060c42,(a3)+
  741.  move.w #$19e,(a1)+
  742.  move.w (a5),(a1)+
  743.  move.w #$19e,(a3)+
  744.  move.w (a5)+,(a3)+
  745.  
  746. **********************************
  747.  
  748.  adda.w #104*4,a0
  749.  adda.w #104*4,a2
  750.  
  751.  dbra d0,fillcop
  752.  
  753. **********************************
  754.  cmp.b #'s',option
  755.  bra smallnotlarge
  756.  move.w #$38,fetchstart
  757.  move.w #$b8,fetchstop
  758.  move.w #$2c81,winstart
  759.  move.w #$2cc1,winstop
  760.  move.w #-40,modulo
  761.  move.w #-40,modulo+4
  762.  
  763.  move.l #scrn+40,a0
  764.  move.l #scrn+160,a1
  765.  move.l #scrn+280,a2
  766.  move.l #scrntab,a3
  767.  move.w #319,d7    ; counter
  768.  move.w #0,d1    ; xpos
  769. plotscrnloop:
  770.  move.b (a3)+,d0
  771.  move.w d1,d2
  772.  asr.w #3,d2
  773.  move.b d1,d3
  774.  not.b d3
  775.  bclr.b d3,-40(a0,d2.w)
  776.  bclr.b d3,(a0,d2.w)
  777.  bclr.b d3,40(a0,d2.w)
  778.  bclr.b d3,-40(a1,d2.w)
  779.  bclr.b d3,(a1,d2.w)
  780.  bclr.b d3,40(a1,d2.w)
  781.  bclr.b d3,-40(a2,d2.w)
  782.  btst #0,d0
  783.  beq.s nobp1
  784.  bset.b d3,-40(a0,d2.w)
  785. nobp1:
  786.  btst #1,d0
  787.  beq.s nobp2
  788.  bset.b d3,(a0,d2.w)
  789. nobp2:
  790.  btst #2,d0
  791.  beq.s nobp3
  792.  bset.b d3,40(a0,d2.w)
  793. nobp3:
  794.  btst #3,d0
  795.  beq.s nobp4
  796.  bset.b d3,-40(a1,d2.w)
  797. nobp4:
  798.  btst #4,d0
  799.  beq.s nobp5
  800.  bset.b d3,(a1,d2.w)
  801. nobp5:
  802.  btst #5,d0
  803.  beq.s nobp6
  804.  bset.b d3,40(a1,d2.w)
  805. nobp6:
  806.  btst #6,d0
  807.  beq.s nobp7
  808.  bset.b d3,-40(a2,d2.w)
  809. nobp7:
  810.  
  811.  addq #1,d1
  812.  
  813.  dbra d7,plotscrnloop
  814.  
  815. smallnotlarge:
  816.  
  817. **********************************
  818.  
  819. ****************************
  820.  jsr INITPLAYER
  821. ; bsr initobjpos
  822. ****************************
  823.  
  824.  
  825.  move.l #$dff000,a6
  826.  
  827.  move.l #null,$dff0a0
  828.  move.w #100,$dff0a4
  829.  move.w #443,$dff0a6
  830.  move.w #63,$dff0a8
  831.  
  832.  move.l #null2,$dff0b0
  833.  move.w #100,$dff0b4
  834.  move.w #443,$dff0b6
  835.  move.w #63,$dff0b8
  836.  
  837.  move.l #null4,$dff0c0
  838.  move.w #100,$dff0c4
  839.  move.w #443,$dff0c6
  840.  move.w #63,$dff0c8
  841.  
  842.  move.l #null3,$dff0d0
  843.  move.w #100,$dff0d4
  844.  move.w #443,$dff0d6
  845.  move.w #63,$dff0d8
  846.  
  847.  move.l #tab,a1
  848.  move.w #64,d7
  849.  move.w #0,d6
  850. outerlop
  851.  move.l #pretab,a0
  852.  move.w #255,d5
  853. scaledownlop:
  854.  move.b (a0)+,d0
  855.  ext.w d0
  856.  ext.l d0
  857.  muls d6,d0
  858.  asr.l #6,d0
  859.  move.b d0,(a1)+
  860.  dbra d5,scaledownlop
  861.  addq #1,d6
  862.  dbra d7,outerlop
  863.  
  864.  move.l #$dff000,a6
  865.  
  866.  move.w #$c018,intena(a6)
  867.  
  868.  move.w #$f,dmacon(a6)
  869.  move.w #$820f,dmacon(a6)
  870.  
  871. ; bsr protinit
  872.  
  873.  bsr FullEnergy
  874.  move.w #63,OldAmmo
  875.  move.w #0,Ammo
  876.  bsr AmmoBar
  877.  move.w #0,OldAmmo
  878.  
  879.  move.b #1,PLR1_GunDamage
  880.  move.b #1,PLR2_GunDamage
  881.  move.w #3,PLR1_GunNoise
  882.  move.w #3,PLR2_GunNoise
  883.  
  884.  move.w #10,GunData    ; 10 shots pistol
  885.  st GunData+7
  886.  clr.b GunData+16+7
  887.  clr.w GunData+16
  888.  move.b #0,GunSelected
  889.  
  890. ; move.w #$20,$1dc(a6)
  891.  
  892.  move.w #$0,$dff034
  893.  move.w #0,Conditions
  894.  move.l #KeyMap,a5
  895.  clr.b $45(a5)
  896.  
  897.  move.l #ingame,mt_data
  898.  clr.b UseAllChannels
  899.  
  900. ; cmp.b #'b',Prefsfile+3
  901. ; bne.s .noback
  902. ; jsr mt_init
  903. ;.noback:
  904. ;
  905. ; clr.b CHANNELDATA
  906. ; clr.b CHANNELDATA+8
  907. ; clr.b CHANNELDATA+16
  908. ; clr.b CHANNELDATA+24
  909. ;
  910. ; cmp.b #'b',Prefsfile+3
  911. ; bne.s noreserve
  912. ;
  913. ; st CHANNELDATA
  914. ; st CHANNELDATA+8
  915. ; st CHANNELDATA+16
  916. ; st CHANNELDATA+24
  917. ;noreserve: 
  918.  
  919. ; st CHANNELDATA
  920. ; st CHANNELDATA+8
  921.  
  922.  move.l #bass,pos0LEFT
  923.  move.l #bassend,Samp0endLEFT
  924.  move.l #playerheight,PLR1s_targheight
  925.  move.l #playerheight,PLR1s_height
  926.  
  927.  move.b #%11011000,$bfd200
  928.  move.b #%00010000,$bfd000
  929. waitloop:
  930.  btst.b #4,$bfd000
  931.  bne.s waitloop
  932.  move.b #%11000000,$bfd200
  933.  st doanything
  934.  
  935. lop: 
  936.  
  937.  move.l #$dff000,a6
  938.  
  939.  move.w hitcol,d0
  940.  beq.s nofadedownhc
  941.  sub.w #$100,d0
  942.  move.w d0,hitcol
  943.  move.w d0,hitcol2
  944. nofadedownhc:
  945.  
  946.  move.l drawpt,d0
  947.  move.l olddrawpt,drawpt
  948.  move.l d0,olddrawpt
  949.  move.l d0,$dff084
  950.  move.l drawpt,a3
  951.  adda.w #10,a3
  952.  move.l a3,frompt
  953.  add.l #104*4*40,a3
  954.  move.l a3,midpt
  955.  
  956. waitfortop:
  957.  btst.b #0,intreqrl(a6)
  958.  beq waitfortop
  959.  move.w #$1,intreq(a6)
  960.  
  961. ; tst.b GOTTOSEND
  962. ; beq.s sendnothing
  963. ; clr.b GOTTOSEND
  964. ; move.l #Chan0inter,$6c
  965.  
  966. sendnothing:
  967.   
  968.  move.b SpaceTapped,SPCTAP
  969.  clr.b SpaceTapped
  970.  
  971.  move.l waterpt,a0
  972.  move.l (a0)+,watertouse
  973.  cmp.l #endwaterlist,a0
  974.  blt.s okwat
  975.  move.l #waterlist,a0
  976. okwat:
  977.  move.l a0,waterpt
  978.  
  979.  add.w #640,wtan
  980.  and.w #8191,wtan
  981.  add.w #1,wateroff
  982.  and.w #63,wateroff
  983.  
  984.  move.w FramesToDraw,TempFrames
  985.  move.w #0,FramesToDraw
  986.  
  987.  lea GunData,a6
  988.  moveq #0,d0
  989.  move.b GunSelected,d0
  990.  add.w d0,d0
  991.  lea (a6,d0.w*8),a6
  992.  move.w (a6),Ammo
  993.  
  994.  JSR INITTIMER
  995.  
  996.  bsr PLR1_Control
  997.  
  998.  move.l #ZoneBrightTable,a1
  999.  move.l ZoneAdds,a2
  1000.  move.l PLR1_ListOfGraphRooms,a0
  1001. doallz
  1002.  move.w (a0),d0
  1003.  blt.s doneallz
  1004.  add.w #8,a0
  1005.  
  1006.  move.l (a2,d0.w*4),a3
  1007.  add.l #LEVELDATA,a3
  1008.  move.w ToZoneBrightness(a3),d2
  1009.  
  1010.  blt.s justbright
  1011.  move.w d2,d3
  1012.  lsr.w #8,d3
  1013.  tst.b d3
  1014.  beq.s justbright
  1015.  
  1016.  move.l #BrightAnimTable,a4
  1017.  move.w -2(a4,d3.w*2),d2
  1018.  
  1019. justbright:
  1020.  move.w d2,(a1,d0.w*4)
  1021.  
  1022.  move.w ToUpperBrightness(a3),d2
  1023.  
  1024.  blt.s justbright2
  1025.  move.w d2,d3
  1026.  lsr.w #8,d3
  1027.  tst.b d3
  1028.  beq.s justbright2
  1029.  
  1030.  move.l #BrightAnimTable,a4
  1031.  move.w -2(a4,d3.w*2),d2
  1032.  
  1033. justbright2:
  1034.  move.w d2,2(a1,d0.w*4)
  1035.  
  1036.  bra doallz
  1037.  
  1038. doneallz:
  1039.  
  1040.  
  1041. ; bsr PLR2_Control
  1042.  
  1043. ******************************************
  1044.  jsr objmoveanim
  1045.  bsr EnergyBar
  1046.  bsr AmmoBar
  1047.  clr.b PLR1_clicked
  1048.  clr.b PLR2_clicked
  1049. ******************************************
  1050.  
  1051.  
  1052.  
  1053.  move.l ObjectPoints,a1
  1054.  move.l PLR1_Obj,a0
  1055.  move.b damagetaken(a0),d2
  1056.  beq notbeenshot
  1057.  move.w #$f00,hitcol
  1058.  move.w #$f00,hitcol2
  1059.  ext.w d2
  1060.  sub.w d2,Energy
  1061.  move.b #0,damagetaken(a0)
  1062.  move.l #Cheese,FacesPtr
  1063.  move.w #3,Cheese
  1064.  move.w #-1,FacesCounter
  1065.  
  1066.  movem.l d0-d7/a0-a6,-(a7)
  1067.  move.w #19,Samplenum
  1068.  clr.b notifplaying
  1069.  move.w #0,Noisex
  1070.  move.w #0,Noisez
  1071.  move.w #100,Noisevol
  1072.  jsr MakeSomeNoise
  1073.  
  1074.  movem.l (a7)+,d0-d7/a0-a6
  1075.  
  1076. notbeenshot:
  1077.  move.b Energy+1,numlives(a0)
  1078.  
  1079.  move.w (a0),d0
  1080.  move.l PLR1_xoff,(a1,d0.w*8)
  1081.  move.l PLR1_zoff,4(a1,d0.w*8)
  1082.  move.l PLR1_Roompt,a1
  1083.  
  1084.  move.w (a1),12(a0)
  1085.  move.w (a1),d2
  1086.  move.l #ZoneBrightTable,a1
  1087.  move.l (a1,d2.w*4),d2
  1088.  tst.b PLR1_StoodInTop
  1089.  bne.s .okinbott
  1090.  swap d2
  1091. .okinbott:
  1092.  
  1093.  move.w d2,2+128(a0)
  1094.  
  1095.  move.l PLR1_yoff,d0
  1096.  asr.l #7,d0
  1097.  move.w d0,4(a0)
  1098.  
  1099.  move.b PLR1_StoodInTop,ObjInTop+128(a0)
  1100.  
  1101.  move.w PLR1_sinval,d4
  1102.  muls #100,d4
  1103.  move.w PLR1_cosval,d5
  1104.  muls #100,d5
  1105.  
  1106.  move.b GunSelected,d0
  1107.  asl.b #2,d0
  1108.  add.b GunFrame,d0
  1109.  move.b d0,11+128(a0)
  1110.  
  1111.  tst.b GunFrame
  1112.  beq.s .noless
  1113.  subq.b #1,GunFrame
  1114. .noless: 
  1115.  
  1116.  move.l ObjectPoints,a1
  1117.  move.w 128(a0),d0
  1118.  move.w 12(a0),12+128(a0)
  1119.  move.l PLR1_xoff,d1
  1120.  add.l d4,d1
  1121.  move.l d1,(a1,d0.w*8)
  1122.  move.l PLR1_zoff,d1
  1123.  add.l d5,d1
  1124.  move.l d1,4(a1,d0.w*8)
  1125.  move.w 4(a0),d0
  1126.  add.w #16,d0
  1127.  move.w d0,4+128(a0)
  1128.  move.w #$2010,6+128(a0)
  1129.  
  1130.  move.l ObjectPoints,a1
  1131.  move.l PLR2_Obj,a0
  1132.  move.w (a0),d0
  1133.  move.l PLR2_xoff,(a1,d0.w*8)
  1134.  move.l PLR2_zoff,4(a1,d0.w*8)
  1135.  move.l PLR2_Roompt,a1
  1136. ************************
  1137.  move.w #-1,12(a0)
  1138.  move.w 10(a1),2(a0)
  1139. ************************
  1140.  move.l PLR2_yoff,d0
  1141.  add.l #playerheight+128*24,d0
  1142.  asr.l #7,d0
  1143.  move.w d0,4(a0)
  1144.  
  1145.  
  1146.  jsr SendToSlave
  1147.  
  1148.  
  1149.  move.w #0,scaleval
  1150.  
  1151.  move.l PLR1_xoff,xoff
  1152.  move.l PLR1_yoff,yoff
  1153.  move.l PLR1_zoff,zoff
  1154.  move.w PLR1_angpos,angpos
  1155.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  1156.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  1157.  move.l PLR1_Roompt,Roompt
  1158.  
  1159.  move.w #0,leftclip
  1160.  move.w #96,rightclip
  1161.  move.w #0,deftopclip
  1162.  move.w #79,defbotclip
  1163.  move.w #0,topclip
  1164.  move.w #79,botclip
  1165. ; sub.l #10*104*4,frompt
  1166. ; sub.l #10*104*4,midpt
  1167.  
  1168. * Subroom loop
  1169.  
  1170.  bsr DrawDisplay
  1171.  
  1172.  bra noglass
  1173.  
  1174. ************************************
  1175. * Test glass routine:
  1176. ************************************
  1177.  
  1178.  move.l #WorkSpace,a0
  1179.  move.l frompt,a2
  1180.  move.w #104*4,d3
  1181.  move.w #1,d6
  1182. ribl
  1183.  move.w #31,d0
  1184. readinto
  1185.  move.w #15,d1
  1186.  move.l a2,a1
  1187. readintodown
  1188.  move.w (a1),(a0)+
  1189.  adda.w d3,a1
  1190.  move.w (a1),(a0)+
  1191.  adda.w d3,a1
  1192.  move.w (a1),(a0)+
  1193.  adda.w d3,a1
  1194.  move.w (a1),(a0)+
  1195.  adda.w d3,a1
  1196.  dbra d1,readintodown
  1197. ; add.w #256-128,a0
  1198.  addq #4,a2
  1199.  dbra d0,readinto
  1200.  addq #4,a2
  1201.  dbra d6,ribl
  1202.  
  1203. * We now have the screen in a buffer
  1204. * for squidging.
  1205.  
  1206.  move.l frompt,a2
  1207.  move.l #WorkSpace,a0
  1208.  move.l glassballpt,a3
  1209.  move.w #$fff,d7
  1210.  move.w #1,d6 
  1211. rfbl:
  1212.  move.w #31,d0
  1213. readoutfrom:
  1214.  move.w #15,d1
  1215.  move.l a2,a1
  1216.  moveq.w #0,d5
  1217. readoutfromdown:
  1218.  move.w (a3)+,d2
  1219.  beq.s nono1
  1220. ; add.w d5,d2
  1221.  move.w (a0,d2.w*2),d2
  1222.  and.w d7,d2
  1223.  move.w d2,(a1)
  1224. nono1:
  1225.  addq #1,d5
  1226.  add.w d3,a1
  1227.  move.w (a3)+,d2
  1228.  beq.s nono2
  1229. ; add.w d5,d2
  1230.  move.w (a0,d2.w*2),d2
  1231.  and.w d7,d2
  1232.  move.w d2,(a1)
  1233. nono2:
  1234.  addq #1,d5
  1235.  add.w d3,a1
  1236.  move.w (a3)+,d2
  1237.  beq.s nono3
  1238. ; add.w d5,d2
  1239.  move.w (a0,d2.w*2),d2
  1240.  and.w d7,d2
  1241.  move.w d2,(a1)
  1242. nono3:
  1243.  addq #1,d5
  1244.  add.w d3,a1
  1245.  move.w (a3)+,d2
  1246.  beq.s nono4
  1247. ; add.w d5,d2
  1248.  move.w (a0,d2.w*2),d2
  1249.  and.w d7,d2
  1250.  move.w d2,(a1)
  1251. nono4:
  1252.  addq #1,d5
  1253.  add.w d3,a1
  1254.  dbra d1,readoutfromdown
  1255.  addq #4,a2
  1256. ; adda.w #128,a0
  1257.  dbra d0,readoutfrom
  1258.  addq #4,a2
  1259.  dbra d6,rfbl
  1260.  
  1261.  move.l glassballpt,d0
  1262.  add.l #64*64*2,d0
  1263.  cmp.l #endglass,d0
  1264.  blt notoffglass
  1265.  move.l #glassball,d0
  1266. notoffglass
  1267.  move.l d0,glassballpt
  1268.  
  1269. noglass:
  1270.  
  1271.  tst.b PLR2
  1272.  bra.s nodrawp2
  1273.  
  1274.  
  1275.  move.l PLR2_xoff,xoff
  1276.  move.l PLR2_yoff,yoff
  1277.  move.l PLR2_zoff,zoff
  1278.  move.w PLR2_angpos,angpos
  1279.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  1280.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  1281.  
  1282.  move.w #0,leftclip
  1283.  move.w #96,rightclip
  1284.  move.w #10,deftopclip
  1285.  move.w #69,defbotclip
  1286.  add.l #68*104*4,frompt
  1287.  add.l #68*104*4,midpt
  1288.  
  1289.  bsr DrawDisplay
  1290.  
  1291.  
  1292. nodrawp2:
  1293.  
  1294. ; move.l #brightentab,a0
  1295. ; move.l frompt,a3
  1296. ; adda.w #(4*33)+(104*4*20),a3
  1297. ; move.w #20,d7
  1298. ; move.w #20,d6
  1299. ;horl:
  1300. ; move.w d6,d5
  1301. ; move.l a3,a1
  1302. ;vertl
  1303. ; move.w (a1),d0
  1304. ; move.w (a0,d0.w*2),(a1)
  1305. ; addq #4,a1
  1306. ; dbra d5,vertl
  1307. ; adda.w #104*4,a3
  1308. ; dbra d7,horl
  1309.  
  1310.  move.l #$dff000,a6
  1311.  
  1312. ; move.w #$300,col0(a6)
  1313.  
  1314.  move.l #KeyMap,a5
  1315.  tst.b $45(a5)
  1316.  beq.s noend
  1317.  
  1318.  bra endnomusic
  1319. noend:
  1320.  
  1321.  tst.w Energy
  1322.  bgt .noend
  1323.  cmp.b #'i',option+4
  1324.  bne end
  1325.  move.w #10,Energy
  1326. .noend:
  1327.  
  1328.  move.l SwitchData,a0
  1329.  tst.b 24+8(a0)
  1330.  bne end
  1331.   
  1332.  JSR STOPTIMER
  1333.  
  1334.  bra lop
  1335.  
  1336. ***************************************************************************
  1337. ***************************************************************************
  1338. ****************** End of Main Loop here ********************************** 
  1339. ***************************************************************************
  1340. ***************************************************************************
  1341.  
  1342.  include "SERIAL_NIGHTMARE"
  1343.  
  1344. GunSelected: dc.b 0
  1345.  even
  1346.  
  1347. GunData:
  1348. ; 0=Pistol 1=Big Gun
  1349. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  1350. ; VISIBLE/INSTANT (0/FF)
  1351. ; damage,gotgun(b)
  1352. ; Delay (w)
  1353.  
  1354.  dc.w 0
  1355.  dc.b 1,3
  1356.  dc.b 20
  1357.  dc.b -1
  1358.  dc.b 1,$ff
  1359.  dc.w 5,0,0,0
  1360.  
  1361.  dc.w 0
  1362.  dc.b 1,1
  1363.  dc.b 40
  1364.  dc.b 0
  1365.  dc.b 4,0
  1366.  dc.w 10,0,0,0
  1367.  
  1368.  dc.w 0
  1369.  dc.b 1,9
  1370.  dc.b 5
  1371.  dc.b 0
  1372.  dc.b 10,0
  1373.  dc.w 50,0,0,0
  1374.  
  1375. protA: dc.w 0
  1376.  
  1377. Path:
  1378. ; incbin "testpath"
  1379. endpath:
  1380. pathpt: dc.l Path
  1381.  
  1382. PLR1KEYS: dc.b 0
  1383. PLR1PATH: dc.b 0
  1384. PLR1MOUSE: dc.b -1
  1385. PLR1JOY: dc.b 0
  1386.  
  1387.  even
  1388.  
  1389. Bobble: dc.w 0
  1390. xwobble: dc.l 0
  1391. xwobxoff: dc.w 0
  1392. xwobzoff: dc.w 0
  1393.  
  1394. PLR1_Control:
  1395.  
  1396. ; Take a snapshot of everything.
  1397.  
  1398.  move.l PLR1_xoff,d2
  1399.  move.l d2,PLR1_oldxoff
  1400.  move.l d2,oldx
  1401.  move.l PLR1_zoff,d3
  1402.  move.l d3,PLR1_oldzoff
  1403.  move.l d3,oldz
  1404.  move.l PLR1s_xoff,d0
  1405.  move.l d0,PLR1_xoff
  1406.  move.l d0,newx
  1407.  move.l PLR1s_zoff,d1
  1408.  move.l d1,newz
  1409.  move.l d1,PLR1_zoff
  1410.  
  1411.  move.l PLR1s_height,PLR1_height
  1412.  
  1413.  sub.l d2,d0
  1414.  sub.l d3,d1
  1415.  move.l d0,xdiff
  1416.  move.l d1,zdiff
  1417.  move.w PLR1s_sinval,PLR1_sinval
  1418.  move.w PLR1s_cosval,PLR1_cosval
  1419.  move.w PLR1s_angpos,PLR1_angpos
  1420.  move.l PLR1s_yoff,d0
  1421.  move.l #SineTable,a1
  1422.  move.w Bobble,d1
  1423.  move.w (a1,d1.w),d1
  1424.  move.w d1,d3
  1425.  ble.s notnegative
  1426.  neg.w d1
  1427. notnegative:
  1428.  add.w #16384,d1
  1429.  asr.w #5,d1
  1430.  move.w d1,d2
  1431.  add.w d1,d1
  1432.  add.w d2,d1
  1433.  ext.l d1
  1434.  add.l d1,d0
  1435.  
  1436.  asr.w #6,d3
  1437.  ext.l d3
  1438.  move.l d3,xwobble
  1439.  move.w PLR1_sinval,d1
  1440.  muls d3,d1
  1441.  move.w PLR1_cosval,d2
  1442.  muls d3,d2
  1443.  swap d1
  1444.  swap d2
  1445.  asr.w #7,d1
  1446.  move.w d1,xwobxoff
  1447.  asr.w #7,d2
  1448.  neg.w d2
  1449.  move.w d2,xwobzoff
  1450.  
  1451.  
  1452.  move.l d0,PLR1_yoff
  1453.  move.l d0,newy
  1454.  move.l d0,oldy
  1455.  move.l PLR1_height,thingheight
  1456.  move.l #40*256,StepUpVal
  1457.  move.l #$1000000,StepDownVal
  1458.  
  1459.  move.l PLR1_Roompt,objroom
  1460.  move.w #%100000000,wallflags
  1461.  move.b PLR1_StoodInTop,StoodInTop
  1462.  
  1463.  bsr MoveObject
  1464.  move.b StoodInTop,PLR1_StoodInTop
  1465.  move.w #0,wallflags
  1466.  move.l objroom,PLR1_Roompt
  1467.  move.w newx,PLR1_xoff
  1468.  move.w newz,PLR1_zoff
  1469.  move.l PLR1_xoff,PLR1s_xoff
  1470.  move.l PLR1_zoff,PLR1s_zoff
  1471.  
  1472.  move.l PLR1_Roompt,a0
  1473.  
  1474.  move.l ToZoneFloor(a0),d0
  1475.  tst.b PLR1_StoodInTop
  1476.  beq.s notintop
  1477.  move.l ToUpperFloor(a0),d0
  1478. notintop:
  1479.  
  1480.  move.l ToZoneRoof(a0),SplitHeight
  1481.  
  1482.  adda.w #ToZonePts,a0
  1483.  sub.l PLR1_height,d0
  1484.  move.l d0,PLR1s_tyoff
  1485.  
  1486. ; move.l (a0),a0        ; jump to viewpoint list
  1487.  * A0 is pointing at a pointer to list of points to rotate
  1488.  move.w (a0)+,d1
  1489.  ext.l d1
  1490.  add.l PLR1_Roompt,d1
  1491.  move.l d1,PLR1_PointsToRotatePtr
  1492.  tst.w (a0)+
  1493.  beq.s nobackgraphics
  1494.  move.l a0,-(a7)
  1495.  jsr putinbackdrop 
  1496.  move.l (a7)+,a0
  1497. nobackgraphics:
  1498.  move.l a0,PLR1_ListOfGraphRooms
  1499.  
  1500. *****************************************************
  1501.  
  1502.  rts
  1503.  
  1504. KeyMap: ds.b 256
  1505.  
  1506. PLR2_Control:
  1507.  move.l #SineTable,a0
  1508.  
  1509.  bsr turnleftright
  1510.  
  1511.  move.w PLR2_angspd,d1
  1512.  move.w PLR2_angpos,d0
  1513.  move.w (a0,d0.w),PLR2_sinval
  1514.  adda.w #2048,a0
  1515.  move.w (a0,d0.w),PLR2_cosval
  1516.  
  1517.  move.l PLR2_xspdval,d6
  1518.  move.l PLR2_zspdval,d7
  1519.  
  1520.  move.w PLR2_xoff,oldxoff
  1521.  move.w PLR2_zoff,oldzoff
  1522.  
  1523.  neg.l d6
  1524.  ble.s .nobug1
  1525.  asr.l #1,d6
  1526.  add.l #1,d6
  1527.  bra.s .bug1
  1528. .nobug1
  1529.  asr.l #1,d6
  1530. .bug1:
  1531.  
  1532. ; beq.s goinnowhere
  1533. ; blt.s goinfor
  1534. ; cmp.l #4*65536,d6
  1535. ; ble.s goinnowhere
  1536. ; move.l #4*65536,d6
  1537. ;goinfor:
  1538. ; cmp.l #-4*65536,d6
  1539. ; bge.s goinnowhere
  1540. ; move.l #-4*65536,d6
  1541. ;goinnowhere:
  1542.  
  1543.  neg.l d7
  1544.  ble.s .nobug2
  1545.  asr.l #1,d7
  1546.  add.l #1,d7
  1547.  bra.s .bug2
  1548. .nobug2
  1549.  asr.l #1,d7
  1550. .bug2: 
  1551.  
  1552. ; beq.s goinnowhere2
  1553. ; blt.s goinfor2
  1554. ; cmp.l #4*65536,d7
  1555. ; ble.s goinnowhere2
  1556. ; move.l #4*65536,d7
  1557. ;goinfor2:
  1558. ; cmp.l #-4*65536,d7
  1559. ; bge.s goinnowhere2
  1560. ; move.l #-4*65536,d7
  1561. ;goinnowhere2:
  1562.  
  1563.  move.w PLR2_sinval,d1
  1564.  move.w PLR2_cosval,d2
  1565.  move.w PLR2_ForwardSpd,d3
  1566.  
  1567.  muls d3,d2
  1568.  muls d3,d1
  1569.  
  1570.  sub.l d1,d6
  1571.  sub.l d2,d7
  1572.  add.l PLR2_pushx,d6
  1573.  add.l PLR2_pushz,d7 
  1574.  add.l d6,PLR2_xspdval
  1575.  add.l d7,PLR2_zspdval
  1576.  move.l PLR2_xspdval,d6
  1577.  move.l PLR2_zspdval,d7
  1578.  add.l d6,PLR2_xoff
  1579.  add.l d7,PLR2_zoff
  1580.  
  1581.  move.w PLR2_xoff,newx
  1582.  move.w PLR2_zoff,newz
  1583.  move.w oldxoff,oldx
  1584.  move.w oldzoff,oldz
  1585.  move.l PLR2_xspdval,xdiff
  1586.  move.l PLR2_zspdval,zdiff
  1587.  move.l PLR2_Roompt,objroom
  1588.  move.w #%100000000,wallflags
  1589.  bsr MoveObject
  1590.  move.w #0,wallflags
  1591.  move.l objroom,PLR2_Roompt
  1592.  move.w newx,PLR2_xoff
  1593.  move.w newz,PLR2_zoff
  1594.  
  1595.  move.l PLR2_xoff,d0
  1596.  move.l PLR2_zoff,d1
  1597.  sub.l oldxoff,d0
  1598.  sub.l oldzoff,d1
  1599.  move.l #0,PLR2_pushx
  1600.  move.l #0,PLR2_pushz
  1601.  move.l d0,PLR2_opushx
  1602.  move.l d1,PLR2_opushz
  1603.  
  1604.  move.l PLR2_Roompt,a0
  1605.  move.l 2(a0),d0
  1606.  sub.l #playerheight,d0
  1607.  move.l d0,PLR2_tyoff
  1608.  adda.w #22,a0
  1609.  
  1610. ; move.l (a0),a0        ; jump to viewpoint list
  1611.  * A0 is pointing at a pointer to list of points to rotate
  1612.  move.l (a0)+,PLR2_PointsToRotatePtr
  1613.  move.l a0,PLR2_ListOfGraphRooms
  1614.  
  1615. *****************************************************
  1616.  
  1617.  move.l PLR2_tyoff,d0
  1618.  move.l PLR2_yoff,d1
  1619.  move.l PLR2_yvel,d2
  1620.  add.l d2,d1
  1621.  add.l #1024,d2
  1622.  sub.l d1,d0
  1623.  bgt.s .shouldfall
  1624.  move.l #0,d2
  1625.  add.l d0,d1
  1626. .shouldfall:
  1627.  move.l d2,PLR2_yvel
  1628.  move.l d1,PLR2_yoff
  1629.  rts
  1630.  
  1631.  
  1632. DrawDisplay:
  1633.  
  1634.  move.l #SineTable,a0
  1635.  move.w angpos,d0
  1636.  move.w (a0,d0.w),d6
  1637.  adda.w #2048,a0
  1638.  move.w (a0,d0.w),d7
  1639.  move.w d6,sinval
  1640.  move.w d7,cosval
  1641.  
  1642.  move.l yoff,d0
  1643.  asr.l #8,d0
  1644.  move.w d0,d1
  1645.  and.w #63,d1
  1646.  move.w d1,wallyoff
  1647.  asl.w #2,d0
  1648.  move.w d0,flooryoff
  1649.  
  1650.  move.w xoff,d6
  1651.  move.w d6,d3
  1652.  asr.w #1,d3
  1653.  add.w d3,d6
  1654.  asr.w #1,d6
  1655.  move.w d6,xoff34
  1656.  
  1657.  move.w zoff,d6
  1658.  move.w d6,d3
  1659.  asr.w #1,d3
  1660.  add.w d3,d6
  1661.  asr.w #1,d6
  1662.  move.w d6,zoff34
  1663.  
  1664.  bsr RotateLevelPts
  1665.  bsr RotateObjectPts
  1666.  bsr OrderZones
  1667.  
  1668.  move.l ListOfGraphRooms,a0
  1669.  
  1670.  move.l endoflist,a0
  1671. subroomloop:
  1672.  move.w -(a0),d7
  1673.  blt jumpoutofrooms
  1674.  
  1675. ; bsr setlrclip
  1676. ; move.w leftclip,d0
  1677. ; cmp.w rightclip,d0
  1678. ; bge subroomloop
  1679.  move.l a0,-(a7)
  1680.  
  1681.  move.l ZoneAdds,a0
  1682.  move.l (a0,d7.w*4),a0
  1683.  add.l #LEVELDATA,a0
  1684.  move.l ToZoneRoof(a0),SplitHeight
  1685.  
  1686.  move.l ZoneGraphAdds,a0
  1687.  move.l 4(a0,d7.w*8),a2
  1688.  move.l (a0,d7.w*8),a0
  1689.  
  1690.  add.l #LEVELGRAPHICS,a0
  1691.  add.l #LEVELGRAPHICS,a2
  1692.  move.l a2,ThisRoomToDraw+4
  1693.  move.l a0,ThisRoomToDraw
  1694.  
  1695.  move.l ListOfGraphRooms,a1
  1696.  
  1697. finditit:
  1698.  tst.w (a1)
  1699.  blt nomoretodoatall
  1700.  cmp.w (a1),d7
  1701.  beq outoffind
  1702.  adda.w #8,a1
  1703.  bra finditit
  1704.  
  1705. outoffind:
  1706.  
  1707.  move.l a1,-(a7)
  1708.  
  1709.  move.w #0,leftclip
  1710.  move.w #96,rightclip
  1711.  moveq #0,d7
  1712.  move.w 2(a1),d7
  1713.  blt.s outofrcliplop
  1714.  move.l #LEVELCLIPS,a0
  1715.  lea (a0,d7.l*2),a0
  1716.  
  1717.  tst.w (a0)
  1718.  blt outoflcliplop
  1719.  
  1720.  bsr NEWsetlclip
  1721.  
  1722. intolcliplop:        ; clips
  1723.  tst.w (a0)
  1724.  blt outoflcliplop
  1725.  
  1726.  bsr NEWsetlclip 
  1727.  bra intolcliplop
  1728.  
  1729. outoflcliplop:
  1730.  
  1731.  addq #2,a0
  1732.  
  1733.  tst.w (a0)
  1734.  blt outofrcliplop
  1735.  
  1736.  bsr NEWsetrclip
  1737.  
  1738. intorcliplop:        ; clips
  1739.  tst.w (a0)
  1740.  blt outofrcliplop
  1741.  
  1742.  bsr NEWsetrclip 
  1743.  bra intorcliplop
  1744.  
  1745. outofrcliplop:
  1746.  
  1747.  move.w leftclip,d0
  1748.  cmp.w #95,d0
  1749.  bge dontbothercantseeit
  1750.  move.w rightclip,d1
  1751.  blt dontbothercantseeit
  1752.  cmp.w d1,d0
  1753.  bge dontbothercantseeit
  1754.  
  1755.  move.l PLR1_yoff,d0
  1756.  cmp.l SplitHeight,d0
  1757.  blt.s botfirst
  1758.  
  1759.  move.l ThisRoomToDraw+4,a0
  1760.  cmp.l #LEVELGRAPHICS,a0
  1761.  beq.s noupperroom
  1762.  st DOUPPER
  1763.  bsr dothisroom
  1764. noupperroom:
  1765.  move.l ThisRoomToDraw,a0
  1766.  clr.b DOUPPER
  1767.  bsr dothisroom
  1768.  
  1769.  bra dontbothercantseeit
  1770. botfirst:
  1771.  
  1772.  move.l ThisRoomToDraw,a0
  1773.  clr.b DOUPPER
  1774.  bsr dothisroom
  1775.  move.l ThisRoomToDraw+4,a0
  1776.  cmp.l #LEVELGRAPHICS,a0
  1777.  beq.s noupperroom2
  1778.  st DOUPPER
  1779.  bsr dothisroom
  1780. noupperroom2:
  1781.  
  1782. dontbothercantseeit:
  1783. pastemp:
  1784.  
  1785.  move.l (a7)+,a1
  1786.  move.l ThisRoomToDraw,a0
  1787.  move.w (a0),d7
  1788.  adda.w #8,a1
  1789.  bra finditit
  1790.  
  1791. nomoretodoatall:
  1792.  
  1793.  move.l (a7)+,a0
  1794.  
  1795.  bra subroomloop
  1796.  
  1797. jumpoutofrooms:
  1798.  
  1799.  rts
  1800.  
  1801. prot9: dc.w 0
  1802.  
  1803. TempBuffer: ds.l 100 
  1804.  
  1805. ClipTable: ds.l 30
  1806. EndOfClipPt: dc.l 0
  1807. DOUPPER: dc.w 0
  1808.  
  1809. dothisroom
  1810.  
  1811.  move.w (a0)+,d0
  1812.  move.w d0,currzone
  1813.  move.l #ZoneBrightTable,a1
  1814.  move.l (a1,d0.w*4),d1
  1815.  tst.b DOUPPER
  1816.  bne.s .okbot
  1817.  swap d1
  1818. .okbot:
  1819.  move.w d1,ZoneBright
  1820.  
  1821. polyloop:
  1822.  move.w (a0)+,d0
  1823.  blt jumpoutofloop
  1824.  beq itsawall
  1825.  cmp.w #3,d0
  1826.  beq itsasetclip
  1827.  blt itsafloor
  1828.  cmp.w #4,d0
  1829.  beq itsanobject
  1830.  cmp.w #5,d0
  1831.  beq.s itsanarc
  1832.  cmp.w #6,d0
  1833.  beq itsalightbeam
  1834.  cmp.w #7,d0
  1835.  beq.s itswater
  1836.  cmp.w #9,d0
  1837.  ble itsachunkyfloor
  1838.  cmp.w #11,d0
  1839.  ble.s itsabumpyfloor
  1840.  cmp.w #12,d0
  1841.  beq.s itsbackdrop
  1842.  cmp.w #13,d0
  1843.  beq.s itsaseewall
  1844.  
  1845.  bra polyloop
  1846.  
  1847. itsaseewall:
  1848.  st seethru
  1849.  jsr itsawalldraw
  1850.  bra polyloop
  1851.  
  1852. itsbackdrop:
  1853.  jsr putinbackdrop
  1854.  bra polyloop
  1855.  
  1856. itswater:
  1857.  move.w #1,d0
  1858.  move.l #FloorLine,LineToUse
  1859.  st usewater
  1860.  clr.b usebumps
  1861.  jsr itsafloordraw
  1862.  bra polyloop
  1863.  
  1864. itsanarc:
  1865.  jsr CurveDraw
  1866.  bra polyloop
  1867. itsanobject:
  1868.  jsr ObjDraw
  1869.  bra polyloop
  1870. itsalightbeam:
  1871.  jsr LightDraw
  1872.  bra polyloop
  1873.  
  1874. itsabumpyfloor:
  1875.  sub.w #9,d0
  1876.  st usebumps
  1877.  st smoothbumps
  1878.  clr.b usewater
  1879.  move.l #BumpLine,LineToUse
  1880.  jsr itsafloordraw
  1881.  bra polyloop
  1882.  
  1883. itsachunkyfloor:
  1884.  subq.w #7,d0
  1885.  st usebumps
  1886.  sub.w #12,topclip
  1887. ; add.w #10,botclip
  1888.  clr.b smoothbumps
  1889.  clr.b usewater
  1890.  move.l #BumpLine,LineToUse
  1891.  jsr itsafloordraw
  1892.  add.w #12,topclip
  1893. ; sub.w #10,botclip
  1894.  bra polyloop 
  1895.  
  1896. itsafloor:
  1897.  
  1898.  move.l #FloorLine,LineToUse
  1899. * 1,2 = floor/roof
  1900.  clr.b usewater
  1901.  clr.b usebumps
  1902.  jsr itsafloordraw
  1903.  bra polyloop
  1904. itsasetclip:
  1905.  bra polyloop
  1906. itsawall:
  1907.  clr.b seethru
  1908. ; move.l #stripbuffer,a1
  1909.  jsr itsawalldraw
  1910.  bra polyloop
  1911.  
  1912. jumpoutofloop:
  1913.  rts
  1914.  
  1915. ThisRoomToDraw: dc.l 0,0
  1916. SplitHeight: dc.l 0
  1917.  
  1918.  include "ab3:source/OrderZones"
  1919.  
  1920. ReadMouse:
  1921.  clr.l d0
  1922.  clr.l d1
  1923.  move.w $a(a6),d0
  1924.  lsr.w #8,d0
  1925.  ext.l d0
  1926.  move.w d0,d3
  1927.  move.w oldmy,d2
  1928.  sub.w d2,d0
  1929.  
  1930.  cmp.w #127,d0
  1931.  blt nonegy
  1932.  move.w #255,d1
  1933.  sub.w d0,d1
  1934.  move.w d1,d0
  1935.  neg.w d0
  1936. nonegy:
  1937.  
  1938.  cmp.w #-127,d0
  1939.  bge nonegy2
  1940.  move.w #255,d1
  1941.  add.w d0,d1
  1942.  move.w d1,d0
  1943. nonegy2:
  1944.  
  1945.  add.b d0,d2
  1946.  add.w d0,oldy2
  1947.  move.w d2,oldmy
  1948.  move.w d2,d0
  1949.  
  1950.  move.w oldy2,d0
  1951.  move.w d0,ymouse
  1952.  
  1953.  clr.l d0
  1954.  clr.l d1
  1955.  move.w $a(a6),d0
  1956.  ext.w d0
  1957.  ext.l d0
  1958.  move.w d0,d3
  1959.  move.w oldmx,d2
  1960.  sub.w d2,d0
  1961.  
  1962.  cmp.w #127,d0
  1963.  blt nonegx
  1964.  move.w #255,d1
  1965.  sub.w d0,d1
  1966.  move.w d1,d0
  1967.  neg.w d0
  1968. nonegx:
  1969.  
  1970.  cmp.w #-127,d0
  1971.  bge nonegx2
  1972.  move.w #255,d1
  1973.  add.w d0,d1
  1974.  move.w d1,d0
  1975. nonegx2:
  1976.  
  1977.  add.b d0,d2
  1978.  move.w d0,d1
  1979.  move.w d2,oldmx
  1980.  
  1981.  move.w #$0,$dff034
  1982.  btst #2,$dff016
  1983.  beq.s noturn
  1984.  
  1985.  add.w d0,oldx2
  1986.  move.w oldx2,d0
  1987.  and.w #2047,d0
  1988.  move.w d0,oldx2
  1989.  
  1990.  asl.w #2,d0
  1991.  sub.w prevx,d0
  1992.  add.w d0,prevx
  1993.  add.w d0,PLR1s_angpos
  1994.  move.w #0,lrs
  1995.  rts
  1996.  
  1997. noturn:
  1998.  
  1999. ; got to move lr instead. 
  2000.  
  2001. ; d1 = speed moved l/r
  2002.  
  2003.  move.w d1,lrs
  2004.  
  2005.  rts
  2006.  
  2007. lrs: dc.w 0
  2008. prevx: dc.w 0
  2009.  
  2010. mang: dc.w 0
  2011. oldymouse: dc.w 0
  2012. xmouse: dc.w 0
  2013. ymouse: dc.w 0
  2014. oldx2: dc.w 0
  2015. oldmx: dc.w 0
  2016. oldmy: dc.w 0
  2017. oldy2: dc.w 0
  2018.  
  2019. RotateLevelPts:
  2020.  
  2021.  move.w sinval,d6
  2022.  swap d6
  2023.  move.w cosval,d6
  2024.  
  2025.  move.l PointsToRotatePtr,a0
  2026.  move.l Points,a3
  2027.  move.l #Rotated,a1
  2028.  move.l #OnScreen,a2
  2029.  move.w xoff,d4
  2030.  move.w zoff,d5
  2031.  
  2032. ; move.w #$c40,$dff106
  2033. ; move.w #$f00,$dff180
  2034.  
  2035. pointrotlop:
  2036.  move.w (a0)+,d7
  2037.  blt.s outofpointrot
  2038.  
  2039.  move.w (a3,d7*4),d0
  2040.  sub.w d4,d0
  2041.  move.w d0,d2
  2042.  move.w 2(a3,d7*4),d1
  2043.  sub.w d5,d1
  2044.  muls d6,d2
  2045.  swap d6
  2046.  move.w d1,d3
  2047.  muls d6,d3
  2048.  sub.l d3,d2
  2049.  add.l d2,d2
  2050.  swap d2
  2051.  ext.l d2
  2052.  asl.l #7,d2
  2053.  add.l xwobble,d2
  2054.  move.l d2,(a1,d7*8)
  2055.  
  2056.  muls d6,d0
  2057.  swap d6
  2058.  muls d6,d1
  2059.  add.l d0,d1
  2060.  asl.l #2,d1
  2061.  swap d1
  2062.  move.l d1,4(a1,d7*8)
  2063.  
  2064.  tst.w d1
  2065.  bgt.s ptnotbehind
  2066.  tst.w d2
  2067.  bgt.s onrightsomewhere
  2068.  move.w #0,d2
  2069.  bra putin
  2070. onrightsomewhere:
  2071.  move.w #96,d2
  2072.  bra putin
  2073. ptnotbehind:
  2074.  
  2075.  divs d1,d2
  2076.  add.w #47,d2
  2077. putin:
  2078.  move.w d2,(a2,d7*2)
  2079.  
  2080.  bra pointrotlop
  2081. outofpointrot:
  2082.  
  2083. ; move.w #$c40,$dff106
  2084. ; move.w #$ff0,$dff180
  2085.  
  2086.  rts
  2087.  
  2088. RotateObjectPts:
  2089.  
  2090.  move.w sinval,d5
  2091.  move.w cosval,d6
  2092.  
  2093.  move.l ObjectData,a4
  2094.  move.l ObjectPoints,a0
  2095.  move.w NumObjectPoints,d7
  2096.  move.l #ObjRotated,a1
  2097.  move.l #ObsInLine,a2
  2098. objpointrotlop:
  2099.  
  2100.  move.w (a0),d0
  2101.  sub.w xoff,d0
  2102.  move.w 4(a0),d1
  2103.  addq #8,a0
  2104.  
  2105.  tst.w 12(a4)
  2106.  blt noworkout
  2107.  
  2108.  sub.w zoff,d1
  2109.  move.w d0,d2
  2110.  muls d6,d2
  2111.  move.w d1,d3
  2112.  muls d5,d3
  2113.  sub.l d3,d2
  2114.  add.l d2,d2
  2115.  swap d2
  2116.  move.w d2,(a1)+
  2117.  
  2118.  muls d5,d0
  2119.  muls d6,d1
  2120.  add.l d0,d1
  2121.  asl.l #2,d1
  2122.  swap d1
  2123.  moveq #0,d3
  2124.  
  2125.  move.w d1,(a1)+
  2126.  ext.l d2
  2127.  asl.l #7,d2
  2128.  add.l xwobble,d2
  2129.  move.l d2,(a1)+
  2130.  sub.l xwobble,d2
  2131.  tst.w d1
  2132.  ble.s notinline
  2133.  
  2134.  
  2135.  move.l d2,d3
  2136.  divs d1,d2
  2137.  cmp.w #-20,d2
  2138.  blt.s notinline
  2139.  cmp.w #20,d2
  2140.  sle d3
  2141. notinline
  2142.  move.b d3,(a2)+
  2143.  
  2144.  add.w #64,a4
  2145.  dbra d7,objpointrotlop
  2146.  
  2147.  rts
  2148.  
  2149. noworkout:
  2150.   clr.b (a2)+
  2151.   move.l #0,(a1)+
  2152.   move.l #0,(a1)+
  2153.   add.w #64,a4
  2154.   dbra d7,objpointrotlop
  2155.   rts
  2156.  
  2157. LightDraw:
  2158.  
  2159.  move.w (a0)+,d0
  2160.  move.w (a0)+,d1
  2161.  move.l #Rotated,a1
  2162.  move.w 6(a1,d0.w*8),d2
  2163.  ble.s oneendbehind
  2164.  move.w 6(a1,d1.w*8),d3
  2165.  bgt.s bothendsinfront
  2166.  
  2167. oneendbehind:
  2168.  rts
  2169. bothendsinfront:
  2170.  
  2171.  move.l #OnScreen,a2
  2172.  move.w (a2,d0.w*2),d0
  2173.  bge.s okleftend
  2174.  moveq #0,d0
  2175. okleftend:
  2176.  move.w (a2,d1.w*2),d1
  2177.  bgt.s somevis
  2178.  rts
  2179. somevis:
  2180.  cmp.w #95,d0
  2181.  ble.s somevis2
  2182.  rts
  2183. somevis2:
  2184.  cmp.w #95,d1
  2185.  ble.s okrightend
  2186.  move.w #95,d1
  2187. okrightend:
  2188.  
  2189.  sub.w d0,d1
  2190.  blt.s wrongbloodywayround
  2191.  move.l #brightentab,a4
  2192.  move.l #objintocop,a1
  2193.  lea (a1,d0.w*2),a1
  2194.  
  2195.  move.l frompt,a3
  2196.  move.w #104*4,d6
  2197.  move.w #79,d2
  2198. lacross:
  2199.  move.w d2,d3
  2200.  move.l a3,a2
  2201.  adda.w (a1)+,a2
  2202. ldown:
  2203.  add.w d6,a2
  2204.  move.w (a2),d7
  2205.  move.w (a4,d7.w*2),(a2)
  2206.  dbra d3,ldown
  2207.  dbra d1,lacross
  2208.  
  2209. wrongbloodywayround:
  2210.  
  2211.  rts
  2212.  
  2213. FaceToPlace: dc.w 0
  2214.  
  2215. Cheese:
  2216.  dc.w 4,15
  2217.  
  2218. FacesList:
  2219.  dc.w 0,4*4
  2220.  dc.w 1,2*4
  2221.  dc.w 0,2*4
  2222.  dc.w 2,2*4
  2223.  dc.w 0,2*4
  2224.  dc.w 1,3*4
  2225.  dc.w 0,2*4
  2226.  dc.w 2,3*4
  2227.  dc.w 0,5*4
  2228.  dc.w 1,2*4
  2229.  dc.w 0,2*4
  2230.  dc.w 2,2*4
  2231.  dc.w 0,2*4
  2232.  dc.w 1,2*4
  2233.  dc.w 0,2*4
  2234.  dc.w 2,3*4
  2235.  dc.w 0,1*4
  2236.  dc.w 1,3*4
  2237.  dc.w 0,1*4
  2238.  dc.w 2,3*4
  2239.  dc.w 0,1*4
  2240.  
  2241. EndOfFacesList:
  2242.  
  2243. FacesPtr:
  2244.  dc.l FacesList
  2245. FacesCounter:
  2246.  dc.w 0
  2247. Expression:
  2248.  dc.w 0
  2249.  
  2250. PlaceFace:
  2251.  
  2252.  move.w FacesCounter,d0
  2253.  subq #1,d0
  2254.  bgt.s NoNewFace
  2255.  
  2256.  move.l FacesPtr,a0
  2257.  
  2258.  move.w 2(a0),d0
  2259.  move.w (a0),Expression
  2260.  addq #4,a0
  2261.  cmp.l #EndOfFacesList,a0
  2262.  blt.s NotFirstFace
  2263.  
  2264.  move.l #FacesList,a0
  2265.  
  2266. NotFirstFace
  2267.  move.l a0,FacesPtr
  2268.  
  2269. NoNewFace:
  2270.  
  2271.  move.w d0,FacesCounter
  2272.  
  2273.  Move.w FaceToPlace,d0
  2274.  muls #5,d0
  2275.  add.w Expression,d0
  2276.  move.l #FacePlace+10,a0
  2277.  move.l #Faces,a1
  2278.  muls #(4*32*5),d0
  2279.  adda.w d0,a1
  2280.  move.w #4,d0
  2281.  move.w #24,d1
  2282.  
  2283.  move.w #4,d3
  2284. bitplaneloop:
  2285.  move.w #31,d2
  2286. PlaceFaceToPlaceInFacePlaceLoop:
  2287.  move.l (a1),(a0)
  2288.  adda.w d0,a1
  2289.  adda.w d1,a0
  2290.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  2291.  dbra d3,bitplaneloop
  2292.  
  2293.  rts
  2294.  
  2295. Energy:
  2296.  dc.w 191
  2297. OldEnergy:
  2298.  dc.w 191
  2299. Ammo: dc.w 63
  2300. OldAmmo: dc.w 63
  2301.  
  2302. FullEnergy:
  2303.  move.w #127,Energy
  2304.  move.w #127,OldEnergy
  2305.  move.l #health,a0
  2306.  move.l #borders,a1
  2307.  add.l #25*8*2+6,a1
  2308.  lea 2592(a1),a2
  2309.  move.w #127,d0
  2310. PutInFull:
  2311.  move.b (a0)+,(a1)
  2312.  move.b (a0)+,8(a1)
  2313.  add.w #16,a1
  2314.  move.b (a0)+,(a2)
  2315.  move.b (a0)+,8(a2)
  2316.  add.w #16,a2
  2317.  dbra d0,PutInFull
  2318.  
  2319.  rts
  2320.  
  2321. EnergyBar:
  2322.  
  2323.  move.w Energy,d0
  2324.  cmp.w OldEnergy,d0
  2325.  bne.s gottochange
  2326.  
  2327. NoChange
  2328.  rts
  2329.  
  2330. gottochange:
  2331.   
  2332.  blt LessEnergy
  2333.  cmp.w #127,Energy
  2334.  blt.s NotMax
  2335.  move.w #127,Energy
  2336. NotMax:
  2337.  
  2338.  move.w Energy,d0
  2339.  move.w OldEnergy,d2
  2340.  sub.w d0,d2
  2341.  beq.s NoChange    
  2342.  neg.w d2
  2343.  
  2344.  move.w #127,d3
  2345.  sub.w d0,d3
  2346.  
  2347.  move.l #health,a0
  2348.  lea (a0,d3.w*4),a0
  2349.  move.l #borders+25*16+6,a1
  2350.  lsl.w #4,d3
  2351.  add.w d3,a1
  2352.  lea 2592(a1),a2
  2353.  
  2354. EnergyRise:
  2355.  move.b (a0)+,(a1)
  2356.  move.b (a0)+,8(a1)
  2357.  add.w #16,a1
  2358.  move.b (a0)+,(a2)
  2359.  move.b (a0)+,8(a2)
  2360.  add.w #16,a2
  2361.  subq #1,d2
  2362.  bgt.s EnergyRise
  2363.  
  2364.  move.w Energy,OldEnergy
  2365.  
  2366.  rts 
  2367.  
  2368. LessEnergy: 
  2369.  move.w OldEnergy,d2
  2370.  sub.w d0,d2
  2371.  
  2372.  move.w #127,d3
  2373.  sub.w OldEnergy,d3
  2374.  
  2375.  move.l #borders+25*16+6,a1
  2376.  asl.w #4,d3
  2377.  add.w d3,a1
  2378.  lea 2592(a1),a2
  2379.  
  2380. EnergyDrain:
  2381.  move.b #0,(a1)
  2382.  move.b #0,8(a1)
  2383.  move.b #0,(a2)
  2384.  move.b #0,8(a2)
  2385.  add.w #16,a1
  2386.  add.w #16,a2
  2387.  subq #1,d2
  2388.  bgt.s EnergyDrain
  2389.  
  2390.  move.w Energy,OldEnergy
  2391.  
  2392.  rts 
  2393.  
  2394. AmmoBar:
  2395.  
  2396.  move.w Ammo,d0
  2397.  cmp.w OldAmmo,d0
  2398.  bne.s .gottochange
  2399.  
  2400. .NoChange
  2401.  rts
  2402.  
  2403. .gottochange:
  2404.   
  2405.  blt LessAmmo
  2406.  cmp.w #63,Ammo
  2407.  blt.s .NotMax
  2408.  move.w #63,Ammo
  2409. .NotMax:
  2410.  
  2411.  move.w Ammo,d0
  2412.  move.w OldAmmo,d2
  2413.  sub.w d0,d2
  2414.  beq.s .NoChange
  2415.  neg.w d2
  2416.  
  2417.  move.w #63,d3
  2418.  sub.w d0,d3
  2419.  
  2420.  move.l #Ammunition,a0
  2421.  lea (a0,d3.w*8),a0
  2422.  move.l #borders+5184+25*16+1,a1
  2423.  lsl.w #5,d3
  2424.  add.w d3,a1
  2425.  lea 2592(a1),a2
  2426.  
  2427. AmmoRise:
  2428.  move.b (a0)+,(a1)
  2429.  move.b (a0)+,8(a1)
  2430.  add.w #16,a1
  2431.  move.b (a0)+,(a2)
  2432.  move.b (a0)+,8(a2)
  2433.  add.w #16,a2
  2434.  move.b (a0)+,(a1)
  2435.  move.b (a0)+,8(a1)
  2436.  add.w #16,a1
  2437.  move.b (a0)+,(a2)
  2438.  move.b (a0)+,8(a2)
  2439.  add.w #16,a2
  2440.  subq #1,d2
  2441.  bgt.s AmmoRise
  2442.  
  2443.  move.w Ammo,OldAmmo
  2444.  
  2445.  rts 
  2446.  
  2447.  
  2448. LessAmmo: 
  2449.  move.w OldAmmo,d2
  2450.  sub.w d0,d2
  2451.  
  2452.  move.w #63,d3
  2453.  sub.w OldAmmo,d3
  2454.  
  2455.  move.l #borders++5184+25*16+1,a1
  2456.  asl.w #5,d3
  2457.  add.w d3,a1
  2458.  lea 2592(a1),a2
  2459.  
  2460. AmmoDrain:
  2461.  move.b #0,(a1)
  2462.  move.b #0,8(a1)
  2463.  move.b #0,(a2)
  2464.  move.b #0,8(a2)
  2465.  add.w #16,a1
  2466.  add.w #16,a2
  2467.  move.b #0,(a1)
  2468.  move.b #0,8(a1)
  2469.  move.b #0,(a2)
  2470.  move.b #0,8(a2)
  2471.  add.w #16,a1
  2472.  add.w #16,a2
  2473.  subq #1,d2
  2474.  bgt.s AmmoDrain
  2475.  
  2476.  move.w Ammo,OldAmmo
  2477.  
  2478.  rts 
  2479.  
  2480. nulop:
  2481.  move.w #$0010,$dff000+intreq
  2482.  rte
  2483.  
  2484. doanything: dc.w 0
  2485.  
  2486. end:
  2487.  
  2488.  move.l drawpt,d0
  2489.  move.l olddrawpt,drawpt
  2490.  move.l d0,olddrawpt
  2491.  move.l d0,$dff084
  2492.  
  2493.  clr.b doanything
  2494.  cmp.b #'b',Prefsfile+3
  2495.  bne.s .noback
  2496.  jsr mt_end
  2497. .noback
  2498.  tst.w Energy
  2499.  bgt.s wevewon
  2500.  
  2501.  move.l #gameover,mt_data
  2502.  st UseAllChannels
  2503.  clr.b reachedend
  2504.  jsr mt_init
  2505. playgameover:
  2506.  move.l #$dff000,a6
  2507. waitfortop2:
  2508.  btst.b #0,intreqrl(a6)
  2509.  beq waitfortop2
  2510.  move.w #$1,intreq(a6)
  2511.  
  2512.  jsr mt_music
  2513.  
  2514.  tst.b reachedend
  2515.  beq.s playgameover
  2516.  
  2517.  bra wevelost
  2518. wevewon:
  2519.  move.l #welldone,mt_data
  2520.  st UseAllChannels
  2521.  clr.b reachedend
  2522.  jsr mt_init
  2523. playwelldone:
  2524.  move.l #$dff000,a6
  2525. waitfortop3:
  2526.  btst.b #0,intreqrl(a6)
  2527.  beq waitfortop3
  2528.  move.w #$1,intreq(a6)
  2529.  
  2530.  jsr mt_music
  2531.  
  2532.  tst.b reachedend
  2533.  beq.s playwelldone
  2534.  
  2535.  
  2536. wevelost:
  2537.  jmp closeeverything 
  2538.  
  2539. endnomusic
  2540.  clr.b doanything
  2541.  cmp.b #'b',Prefsfile+3
  2542.  bne.s .noback
  2543.  jsr mt_end
  2544. .noback
  2545.  jmp closeeverything
  2546.  
  2547. do32:
  2548.  move.w #31,d7
  2549.  move.w #$180,d1
  2550. across:
  2551.  move.w d1,(a1)+
  2552.  move.w d1,(a3)+
  2553.  move.w #0,(a1)+
  2554.  move.w #0,(a3)+
  2555.  add.w #2,d1
  2556.  dbra d7,across
  2557.  rts
  2558.  
  2559.  
  2560.  
  2561. *************************************
  2562. * Set left and right clip values
  2563. *************************************
  2564.  
  2565.  
  2566.  
  2567. NEWsetlclip:
  2568.  move.l #OnScreen,a1
  2569.  move.l #Rotated,a2
  2570.  move.l CONNECT_TABLE,a3
  2571.  
  2572.  move.w (a0),d0
  2573.  bge.s .notignoreleft
  2574.  
  2575. ; move.l #0,(a6)
  2576.  
  2577.  bra .leftnotoktoclip
  2578. .notignoreleft:
  2579.  
  2580.  move.w 6(a2,d0*8),d3    ; left z val
  2581.  bgt.s .leftclipinfront
  2582.  addq #2,a0
  2583.  rts
  2584.  
  2585.  tst.w 6(a2,d0*8)
  2586.  bgt.s .leftnotoktoclip
  2587. .ignoreboth:
  2588. ; move.l #0,(a6)
  2589. ; move.l #96*65536,4(a6)
  2590.  move.w #0,leftclip
  2591.  move.w #96,rightclip
  2592.  addq #8,a6
  2593.  addq #2,a0
  2594.  rts
  2595.  
  2596. .leftclipinfront:
  2597.  move.w (a1,d0*2),d1    ; left x on screen
  2598.  move.w (a0),d2
  2599.  move.w 2(a3,d2.w*4),d2
  2600.  move.w (a1,d2.w*2),d2
  2601.  cmp.w d1,d2
  2602.  bgt.s .leftnotoktoclip
  2603.  
  2604. ; move.w d1,(a6)
  2605. ; move.w d3,2(a6)
  2606.  cmp.w leftclip(pc),d1
  2607.  ble.s .leftnotoktoclip
  2608.  move.w d1,leftclip
  2609. .leftnotoktoclip:
  2610.  
  2611.  addq #2,a0
  2612.  
  2613.  rts
  2614.  
  2615. NEWsetrclip
  2616.  move.l #OnScreen,a1
  2617.  move.l #Rotated,a2
  2618.  move.l CONNECT_TABLE,a3
  2619.  move.w (a0),d0
  2620.  bge.s .notignoreright
  2621. ; move.w #96,4(a6)
  2622. ; move.w #0,6(a6)
  2623.  move.w #0,d4
  2624.  bra .rightnotoktoclip
  2625. .notignoreright:
  2626.  move.w 6(a2,d0*8),d4    ; right z val
  2627.  bgt.s .rightclipinfront
  2628. ; move.w #96,4(a6)
  2629. ; move.w #0,6(a6)
  2630.  bra.s .rightnotoktoclip
  2631.  
  2632. .rightclipinfront:
  2633.  move.w (a1,d0*2),d1    ; right x on screen
  2634.  move.w (a0),d2
  2635.  move.w (a3,d2.w*4),d2
  2636.  move.w (a1,d2.w*2),d2
  2637.  cmp.w d1,d2
  2638.  blt.s .rightnotoktoclip
  2639. ; move.w d1,4(a6)
  2640. ; move.w d4,6(a6)
  2641.  
  2642.  cmp.w rightclip(pc),d1
  2643.  bge.s .rightnotoktoclip
  2644.  addq #1,d1
  2645.  move.w d1,rightclip
  2646. .rightnotoktoclip:
  2647.  addq #8,a6
  2648.  addq #2,a0
  2649.  rts
  2650.  
  2651. FIRSTsetlrclip:
  2652.  move.l #OnScreen,a1
  2653.  move.l #Rotated,a2
  2654.  
  2655.  move.w (a0)+,d0
  2656.  bge.s .notignoreleft
  2657.  bra .leftnotoktoclip
  2658. .notignoreleft:
  2659.  
  2660.  move.w 6(a2,d0*8),d3    ; left z val
  2661.  bgt.s .leftclipinfront
  2662.  
  2663.  move.w (a0),d0
  2664.  blt.s .ignoreboth
  2665.  tst.w 6(a2,d0*8)
  2666.  bgt.s .leftnotoktoclip
  2667. .ignoreboth
  2668.  move.w #96,rightclip
  2669.  move.w #0,leftclip
  2670.  addq #2,a0
  2671.  rts
  2672.  
  2673. .leftclipinfront:
  2674.  move.w (a1,d0*2),d1    ; left x on screen
  2675.  cmp.w leftclip(pc),d1
  2676.  ble.s .leftnotoktoclip
  2677.  move.w d1,leftclip
  2678. .leftnotoktoclip:
  2679.  
  2680.  move.w (a0)+,d0
  2681.  bge.s .notignoreright
  2682.  move.w #0,d4
  2683.  bra .rightnotoktoclip
  2684. .notignoreright:
  2685.  move.w 6(a2,d0*8),d4    ; right z val
  2686.  ble.s .rightnotoktoclip
  2687.  
  2688. .rightclipinfront:
  2689.  move.w (a1,d0*2),d1    ; right x on screen
  2690.  cmp.w rightclip(pc),d1
  2691.  bge.s .rightnotoktoclip
  2692.  addq #1,d1
  2693.  move.w d1,rightclip
  2694. .rightnotoktoclip:
  2695.  
  2696. ; move.w leftclip,d0
  2697. ; move.w rightclip,d1
  2698. ; cmp.w d0,d1
  2699. ; bge.s .noswap
  2700. ; move.w #96,rightclip
  2701. ; move.w #0,leftclip
  2702. ;.noswap:
  2703.  
  2704.  rts
  2705.  
  2706.  
  2707. leftclip2: dc.w 0
  2708. rightclip2: dc.w 0
  2709. ZoneBright: dc.w 0
  2710.  
  2711. npolys: dc.w 0
  2712.  
  2713. PLR1_fire: dc.b 0
  2714. PLR2_fire: dc.b 0
  2715.  
  2716. turnleftright:
  2717.  
  2718.  move.w PLR2_angspd,d1
  2719.  move.w PLR2_angpos,d0
  2720.  
  2721.  move.w #120,d7
  2722.  muls TempFrames,d7
  2723.  
  2724.  move.w d1,d2
  2725.  neg.w d2
  2726.  cmp.w d7,d2
  2727.  ble.s okslow
  2728.  move.w d7,d2
  2729. okslow
  2730.  neg.w d7
  2731.  cmp.w d7,d2
  2732.  bge.s okslo
  2733.  move.w d7,d2
  2734. okslo:
  2735.  
  2736.  asr.w #1,d7
  2737.  
  2738.  btst #1,$d(a6)
  2739.  sne d3
  2740.  beq.s notleft
  2741.  move.w d7,d2
  2742.  neg.w d2
  2743. ; tst.w d1
  2744. ; bge.s notleft
  2745. ; moveq #0,d1
  2746. notleft
  2747.  
  2748.  btst #1,$c(a6)
  2749.  sne d4
  2750.  beq.s notright
  2751.  move.w d7,d2
  2752. ; tst.w d1
  2753. ; ble.s notright
  2754. ; moveq #0,d1
  2755. notright
  2756.  
  2757.  move.w #0,PLR2_ForwardSpd
  2758.  
  2759.  btst #0,$dff00c
  2760.  sne d5
  2761.  eor.b d4,d5
  2762.  beq.s notup
  2763.  move.w TempFrames,d7
  2764.  neg.w d7
  2765.  asl.w #2,d7
  2766.  move.w d7,PLR2_ForwardSpd
  2767. notup:
  2768.  
  2769.  btst #0,$dff00d
  2770.  sne d5
  2771.  eor.b d3,d5
  2772.  beq.s notdown
  2773.  move.w TempFrames,d7
  2774.  asl.w #2,d7
  2775.  move.w d7,PLR2_ForwardSpd
  2776. notdown:
  2777.  
  2778.  add.w d2,d1
  2779.  cmp.w #-360,d1
  2780.  bge.s okspdlft
  2781.  move.w #-360,d1
  2782. okspdlft:
  2783.  cmp.w #360,d1
  2784.  ble.s okspdrgt
  2785.  move.w #360,d1
  2786. okspdrgt:
  2787.  
  2788.  move.w d1,PLR2_angspd
  2789.  add.w d1,d0
  2790.  and.w #8191,d0
  2791.  move.w d0,PLR2_angpos
  2792.  rts
  2793.  
  2794. *****************************************************
  2795.  
  2796.  include "ab3:source/ObjectMove"
  2797.  
  2798. pastdata:
  2799. ***********************************
  2800. * This routine animates brightnesses.
  2801.  
  2802.  
  2803. liftpt: dc.l liftanimtab
  2804.  
  2805. brightpt:
  2806.  dc.l brightanimtab
  2807.  
  2808.  
  2809. liftanim:
  2810.  rts
  2811.  
  2812. ******************************
  2813.  include "ab3:source/Anims"
  2814. ******************************
  2815. startpass:
  2816. ; include "ab3:source/password_reloc.s"
  2817. endpass:
  2818.  
  2819. rotanimpt: dc.w 0
  2820. xradd: dc.w 5
  2821. yradd: dc.w 8
  2822. xrpos: dc.w 320
  2823. yrpos: dc.w 320
  2824.  
  2825. rotanim:
  2826.  rts
  2827.  
  2828. option:
  2829.  dc.l 0,0
  2830.  
  2831. ********** WALL STUFF *******************************
  2832.  
  2833.  include "AB3:source/wallroutine3.chipmem"
  2834.  
  2835. *****************************************************
  2836.  
  2837. ******************************************
  2838. * floor polygon
  2839.  
  2840. numsidestd: dc.w 0
  2841. bottomline: dc.w 0
  2842.  
  2843. NewCornerBuff:
  2844.  ds.l 100
  2845.  
  2846. itsafloordraw:
  2847.  
  2848. * If D0 =1 then its a floor otherwise (=2) it's
  2849. * a roof.
  2850.  
  2851.  move.w #0,above
  2852.  move.w (a0)+,d6    ; ypos of poly
  2853.  
  2854.  move.w leftclip(pc),d7
  2855.  cmp.w rightclip(pc),d7
  2856.  bge.s dontdrawreturn
  2857.  
  2858.  move.w botclip,d7
  2859.  sub.w #40,d7
  2860.  ble.s dontdrawreturn
  2861.  sub.w flooryoff,d6
  2862.  bgt.s below
  2863.  blt.s aboveplayer
  2864. dontdrawreturn:
  2865.  move.w (a0)+,d6    ; sides-1
  2866.  add.w d6,d6
  2867.  add.w d6,a0
  2868.  add.w #4+6,a0
  2869.  rts
  2870. aboveplayer:
  2871.  cmp.w #2,d0
  2872.  bne.s dontdrawreturn
  2873.  move.w #40,d7
  2874.  sub.w topclip,d7 
  2875.  blt.s dontdrawreturn
  2876.  move.w #1,d0
  2877.  move.w d0,above
  2878.  neg.w d6
  2879. below:
  2880.  cmp.w #1,d0
  2881.  bne.s dontdrawreturn
  2882.  move.w d6,distaddr
  2883.  muls #64,d6
  2884.  move.l d6,ypos
  2885.  divs d7,d6        ; zpos of bottom
  2886.             ; visible line
  2887.  move.w d6,minz
  2888.  move.w d7,bottomline
  2889.  
  2890. ; Go round each point finding out
  2891. ; if it should be visible or not.
  2892.  
  2893.  move.l a0,-(a7)
  2894.  
  2895.  move.w (a0)+,d7    ; number of sides
  2896.  move.l #Rotated,a1
  2897.  move.l #OnScreen,a2
  2898.  move.l #NewCornerBuff,a3
  2899.  moveq #0,d4
  2900.  moveq #0,d5
  2901.  moveq #0,d6
  2902.  clr.b anyclipping
  2903.  
  2904. cornerprocessloop:
  2905.  
  2906.  move.w (a0)+,d0
  2907.  move.w 6(a1,d0.w*8),d1
  2908.  ble  .canttell
  2909.  
  2910.  move.w (a2,d0.w*2),d3
  2911.  cmp.w leftclip,d3
  2912.  bgt.s .nol
  2913.  st d4
  2914.  st anyclipping
  2915.  bra.s .nos
  2916. .nol:
  2917.  cmp.w rightclip,d3
  2918.  blt.s .nor
  2919.  st d6
  2920.  st anyclipping
  2921.  bra.s .nos
  2922. .nor:
  2923.  st d5
  2924. .nos:
  2925.  bra .cantell
  2926.  
  2927. .canttell:
  2928.  st d5
  2929.  st anyclipping
  2930.  
  2931. .cantell:
  2932.  
  2933.  
  2934.  dbra d7,cornerprocessloop
  2935.  
  2936.  move.l (a7)+,a0
  2937.  tst.b d5
  2938.  bne.s somefloortodraw
  2939.  eor.b d4,d6
  2940.  bne dontdrawreturn
  2941.  
  2942. somefloortodraw:
  2943.  
  2944.  move.w #80,top
  2945.  move.w #-1,bottom
  2946.  move.w #0,drawit
  2947.  move.l #Rotated,a1
  2948.  move.l #OnScreen,a2
  2949.  move.w (a0)+,d7    ; no of sides
  2950. sideloop:
  2951.  move.w minz,d6
  2952.  move.w (a0)+,d1
  2953.  move.w (a0),d3
  2954.  move.w 6(a1,d1*8),d4    ;first z
  2955.  cmp.w d6,d4
  2956.  bgt firstinfront
  2957.  move.w 6(a1,d3*8),d5    ; sec z
  2958.  cmp.w d6,d5
  2959.  ble bothbehind
  2960. ** line must be on left and partially behind.
  2961.  sub.w d5,d4
  2962.  move.l (a1,d1*8),d0
  2963.  sub.l (a1,d3*8),d0
  2964.  asr.l #7,d0
  2965.  sub.w d5,d6
  2966.  muls d6,d0    ; new x coord
  2967.  divs d4,d0
  2968.  ext.l d0
  2969.  asl.l #7,d0
  2970.  
  2971.  add.l (a1,d3*8),d0
  2972.  move.w minz,d4
  2973.  move.w (a2,d3*2),d2
  2974.  divs d4,d0
  2975.  add.w #47,d0
  2976.  move.l ypos,d3
  2977.  divs d5,d3
  2978.  move.w bottomline,d1 
  2979.  bra lineclipped
  2980.  
  2981. firstinfront:
  2982.  move.w 6(a1,d3*8),d5    ; sec z
  2983.  cmp.w d6,d5
  2984.  bgt bothinfront
  2985. ** line must be on right and partially behind.
  2986.  sub.w d4,d5    ; dz
  2987.  move.l (a1,d3*8),d2
  2988.  sub.l (a1,d1*8),d2    ; dx
  2989.  sub.w d4,d6
  2990.  asr.l #7,d2
  2991.  muls d6,d2    ; new x coord
  2992.  divs d5,d2
  2993.  ext.l d2
  2994.  asl.l #7,d2
  2995.  add.l (a1,d1*8),d2
  2996.  move.w minz,d5
  2997.  move.w (a2,d1*2),d0
  2998.  divs d5,d2
  2999.  add.w #47,d2
  3000.  move.l ypos,d1
  3001.  divs d4,d1
  3002.  move.w bottomline,d3 
  3003.  bra lineclipped
  3004.  
  3005. bothinfront:
  3006.  
  3007. * Also, usefully enough, both are on-screen
  3008. * so no bottom clipping is needed.
  3009.  
  3010.  move.w (a2,d1*2),d0    ; first x
  3011.  move.w (a2,d3*2),d2    ; second x
  3012.  move.l ypos,d1
  3013.  move.l d1,d3
  3014.  divs d4,d1        ; first y
  3015.  divs d5,d3        ; second y
  3016. lineclipped:
  3017.  move.l #rightsidetab,a3
  3018.  cmp.w d1,d3
  3019.  beq lineflat
  3020.  st drawit
  3021.  bgt lineonright
  3022.  move.l #leftsidetab,a3
  3023.  exg d1,d3
  3024.  exg d0,d2
  3025.  
  3026.  lea (a3,d1*2),a3
  3027.  
  3028.  cmp.w top(pc),d1
  3029.  bge.s .nonewtop
  3030.  move.w d1,top
  3031. .nonewtop:
  3032.  cmp.w bottom(pc),d3
  3033.  ble.s .nonewbot
  3034.  move.w d3,bottom
  3035. .nonewbot:
  3036.  
  3037.  sub.w d1,d3    ; dy
  3038.  sub.w d0,d2    ; dx
  3039.  
  3040.  blt .linegoingleft
  3041.  sub.w #1,d0
  3042.  
  3043.  ext.l d2
  3044.  divs d3,d2
  3045.  move.w d2,d6
  3046.  swap d2
  3047.  
  3048. ; moveq #0,d6
  3049. ; sub.w d3,d2
  3050. ; blt.s .noco
  3051. ;.makeco
  3052. ; addq #1,d6
  3053. ; sub.w d3,d2
  3054. ; bge.s .makeco
  3055. ;.noco
  3056. ; add.w d3,d2
  3057.  
  3058.  move.w d3,d4
  3059.  move.w d3,d5
  3060.  subq #1,d5
  3061.  move.w d6,d1
  3062.  addq #1,d1
  3063.  
  3064. .pixlopright:
  3065.  move.w d0,(a3)+
  3066.  sub.w d2,d4
  3067.  bge.s .nobigstep
  3068.  add.w d1,d0
  3069.  add.w d3,d4
  3070.  dbra d5,.pixlopright
  3071.  bra lineflat
  3072. .nobigstep
  3073.  add.w d6,d0
  3074.  dbra d5,.pixlopright
  3075.  bra lineflat
  3076.  
  3077. .linegoingleft:
  3078.  
  3079.  sub.w #1,d0
  3080.  
  3081.  neg.w d2
  3082.  
  3083.  ext.l d2
  3084.  divs d3,d2
  3085.  move.w d2,d6
  3086.  swap d2
  3087.  
  3088.  
  3089. ; moveq #0,d6
  3090. ; sub.w d3,d2
  3091. ; blt.s .nocol
  3092. ;.makecol
  3093. ; addq #1,d6
  3094. ; sub.w d3,d2
  3095. ; bge.s .makecol
  3096. ;.nocol
  3097. ; add.w d3,d2
  3098.  
  3099.  
  3100.  
  3101.  move.w d3,d4
  3102.  move.w d3,d5
  3103.  subq #1,d5
  3104.  
  3105.  move.w d6,d1
  3106.  addq #1,d1
  3107.  
  3108. .pixlopleft:
  3109.  sub.w d2,d4
  3110.  bge.s .nobigstepl
  3111.  sub.w d1,d0
  3112.  add.w d3,d4
  3113.  move.w d0,(a3)+
  3114.  dbra d5,.pixlopleft
  3115.  bra lineflat
  3116.  
  3117. .nobigstepl
  3118.  sub.w d6,d0
  3119.  move.w d0,(a3)+
  3120.  dbra d5,.pixlopleft
  3121.  bra lineflat
  3122.  
  3123. lineonright:
  3124.  
  3125.  lea (a3,d1*2),a3
  3126.  
  3127.  cmp.w top(pc),d1
  3128.  bge.s .nonewtop
  3129.  move.w d1,top
  3130. .nonewtop:
  3131.  cmp.w bottom(pc),d3
  3132.  ble.s .nonewbot
  3133.  move.w d3,bottom
  3134. .nonewbot:
  3135.  
  3136.  sub.w d1,d3    ; dy
  3137.  sub.w d0,d2    ; dx
  3138.  blt .linegoingleft
  3139. ; addq #1,d0
  3140.  ext.l d2
  3141.  divs d3,d2
  3142.  move.w d2,d6
  3143.  swap d2
  3144.  
  3145. ; moveq #0,d6
  3146. ; sub.w d3,d2
  3147. ; blt.s .noco
  3148. ;.makeco
  3149. ; addq #1,d6
  3150. ; sub.w d3,d2
  3151. ; bge.s .makeco
  3152. ;.noco
  3153. ; add.w d3,d2
  3154.  
  3155.  move.w d3,d4
  3156.  move.w d3,d5
  3157.  subq #1,d5
  3158.  move.w d6,d1
  3159.  addq #1,d1
  3160.  
  3161. .pixlopright:
  3162.  sub.w d2,d4
  3163.  bge.s .nobigstep
  3164.  add.w d1,d0
  3165.  add.w d3,d4
  3166.  move.w d0,(a3)+
  3167.  dbra d5,.pixlopright
  3168.  bra lineflat
  3169.  
  3170. .nobigstep
  3171.  add.w d6,d0
  3172.  move.w d0,(a3)+
  3173.  dbra d5,.pixlopright
  3174.  bra lineflat
  3175.  
  3176. .linegoingleft:
  3177. ; addq #1,d0
  3178.  neg.w d2
  3179.  
  3180.  ext.l d2
  3181.  divs d3,d2
  3182.  move.w d2,d6
  3183.  swap d2
  3184.  
  3185.  
  3186. ; moveq #0,d6
  3187. ; sub.w d3,d2
  3188. ; blt.s .nocol
  3189. ;.makecol
  3190. ; addq #1,d6
  3191. ; sub.w d3,d2
  3192. ; bge.s .makecol
  3193. ;.nocol
  3194. ; add.w d3,d2
  3195.  
  3196.  move.w d3,d4
  3197.  move.w d3,d5
  3198.  subq #1,d5
  3199.  move.w d6,d1
  3200.  addq #1,d1
  3201.  
  3202. .pixlopleft:
  3203.  move.w d0,(a3)+
  3204.  sub.w d2,d4
  3205.  bge.s .nobigstepl
  3206.  sub.w d1,d0
  3207.  add.w d3,d4
  3208.  dbra d5,.pixlopleft
  3209.  bra lineflat
  3210.  
  3211. .nobigstepl
  3212.  sub.w d6,d0
  3213.  dbra d5,.pixlopleft
  3214.  
  3215. lineflat:
  3216.  
  3217. bothbehind:
  3218.  dbra d7,sideloop
  3219.  
  3220. pastsides:
  3221.  
  3222.  
  3223.  addq #2,a0
  3224.  
  3225.  move.w #104*4,linedir
  3226.  move.l frompt,a6
  3227.  add.l #104*4*41,a6
  3228.  move.w (a0)+,scaleval
  3229.  move.w (a0)+,whichtile
  3230.  move.w (a0)+,d6
  3231.  add.w ZoneBright,d6
  3232.  move.w d6,lighttype
  3233.  move.w above(pc),d6
  3234.  beq groundfloor
  3235. * on ceiling:
  3236.  move.w #-104*4,linedir
  3237.  suba.w #104*4,a6
  3238. groundfloor:
  3239.  
  3240.  move.w xoff,d6
  3241.  move.w zoff,d7
  3242.  add.w xwobxoff,d7
  3243.  add.w xwobzoff,d6
  3244.  move.w scaleval(pc),d3
  3245.  beq.s .samescale
  3246.  bgt.s .scaledown
  3247.  neg.w d3
  3248.  asr.l d3,d7
  3249.  asr.l d3,d6
  3250.  bra.s .samescale
  3251. .scaledown:
  3252.  asl.l d3,d6
  3253.  asl.l d3,d7
  3254. .samescale
  3255.  asl.w #8,d7
  3256.  move.w d6,sxoff
  3257.  move.w d7,szoff
  3258.  bra pastscale 
  3259.  
  3260.  asr.l #3,d1
  3261.  asr.l #3,d2
  3262.  asr.l #2,d1
  3263.  asr.l #2,d2
  3264.  asr.l #1,d1
  3265.  asr.l #1,d2
  3266. scaleprogfrom
  3267.  nop
  3268.  nop
  3269.  asl.l #1,d1
  3270.  asl.l #1,d2
  3271.  asl.l #2,d1
  3272.  asl.l #2,d2
  3273.  asl.l #3,d1
  3274.  asl.l #3,d2
  3275.  
  3276. top: dc.w 0
  3277. bottom: dc.w 0
  3278. ypos: dc.l 0
  3279. nfloors: dc.w 0
  3280. lighttype: dc.w 0
  3281. above: dc.w 0 
  3282. linedir: dc.w 0
  3283. distaddr: dc.w 0
  3284.  
  3285. minz: dc.w 0
  3286. leftsidetab:
  3287.  ds.w 80
  3288. rightsidetab:
  3289.  ds.w 80
  3290. leftsideclip:
  3291.  ds.w 80
  3292. rightsideclip:
  3293.  ds.w 80
  3294.  
  3295. movespd: dc.w 0
  3296. largespd: dc.l 0
  3297.  
  3298. pastscale:
  3299.  
  3300.  tst.b drawit(pc)
  3301.  beq dontdrawfloor
  3302.  
  3303.  move.l a0,-(a7)
  3304.  
  3305.  move.l #leftsidetab,a4
  3306.  move.w top(pc),d1
  3307.  move.w bottom(pc),d7
  3308.  tst.w above
  3309.  beq.s clipfloor
  3310.  
  3311.  move.w #40,d3
  3312.  move.w d3,d4
  3313.  sub.w topclip,d3
  3314.  sub.w botclip,d4
  3315.  cmp.w d3,d1
  3316.  bge predontdrawfloor
  3317.  cmp.w d4,d7
  3318.  blt predontdrawfloor
  3319.  cmp.w d4,d1
  3320.  bge.s .nocliptoproof
  3321.  move.w d4,d1
  3322. .nocliptoproof
  3323.  cmp.w d3,d7
  3324.  blt doneclip
  3325.  move.w d3,d7
  3326.  bra doneclip
  3327.  
  3328. clipfloor:
  3329.  move.w botclip,d4
  3330.  sub.w #40,d4
  3331.  cmp.w d4,d1
  3332.  bge predontdrawfloor
  3333.  move.w topclip,d3
  3334.  sub.w #40,d3
  3335.  cmp.w d3,d1
  3336.  bge.s .nocliptopfloor
  3337.  move.w d3,d1
  3338. .nocliptopfloor 
  3339.  cmp.w d3,d7
  3340.  ble predontdrawfloor
  3341.  cmp.w d4,d7
  3342.  blt.s .noclipbotfloor
  3343.  move.w d4,d7
  3344. .noclipbotfloor:
  3345.  
  3346. doneclip:
  3347.  
  3348.  lea (a4,d1*2),a4
  3349. ; move.l #dists,a2
  3350.  move.w distaddr,d0
  3351.  muls #64,d0
  3352.  move.l d0,a2
  3353. ; muls #25,d0
  3354. ; adda.w d0,a2
  3355. ; lea (a2,d1*2),a2
  3356.  sub.w d1,d7
  3357.  ble predontdrawfloor 
  3358.  move.w d1,d0
  3359.  bne.s .notzero
  3360.  moveq #1,d0
  3361. .notzero
  3362.  muls linedir,d1
  3363.  add.l d1,a6
  3364.  move.l #floorscalecols,a1
  3365.  move.l LineToUse,a5
  3366.  
  3367.  tst.b anyclipping
  3368.  beq dofloornoclip
  3369.  
  3370. dofloor:
  3371. ; move.w (a2)+,d0
  3372.  move.w leftclip(pc),d3
  3373.  move.w rightclip(pc),d4
  3374.  move.w rightsidetab-leftsidetab(a4),d2
  3375.  addq #1,d2
  3376.  cmp.w d3,d2
  3377.  ble.s nodrawline
  3378.  cmp.w d4,d2
  3379.  ble.s noclipright
  3380.  move.w d4,d2
  3381. noclipright:
  3382.  move.w (a4),d1
  3383.  cmp.w d4,d1
  3384.  bge.s nodrawline
  3385.  cmp.w d3,d1
  3386.  bge.s noclipleft
  3387.  move.w d3,d1
  3388. noclipleft:
  3389.  cmp.w d1,d2
  3390.  ble.s nodrawline
  3391.  
  3392.  move.w d1,leftedge
  3393.  move.w d2,rightedge
  3394.  
  3395.  move.l a6,a3
  3396.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  3397.  move.l a2,d7
  3398.  divs d0,d7
  3399.  move.w d7,d0
  3400.  jsr (a5)
  3401.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  3402. nodrawline
  3403.  adda.w linedir(pc),a6
  3404.  addq #2,a4
  3405.  addq #1,d0
  3406.  subq #1,d7
  3407.  bgt dofloor
  3408.  
  3409. predontdrawfloor
  3410.  move.l (a7)+,a0
  3411.  
  3412. dontdrawfloor:
  3413.  
  3414.  CACHE_FREEZE_OFF d2
  3415.  rts
  3416.  
  3417. anyclipping: dc.w 0
  3418.  
  3419. dofloornoclip:
  3420. ; move.w (a2)+,d0
  3421.  move.w rightsidetab-leftsidetab(a4),d2
  3422.  addq #1,d2
  3423.  move.w (a4)+,leftedge
  3424.  move.w d2,rightedge
  3425.  
  3426.  move.l a6,a3
  3427.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  3428.  move.l a2,d7
  3429.  divs d0,d7
  3430.  move.w d7,d0
  3431.  jsr (a5)
  3432.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  3433.  adda.w linedir(pc),a6
  3434.  addq #1,d0
  3435.  subq #1,d7
  3436.  bgt dofloornoclip
  3437.  
  3438.  bra predontdrawfloor
  3439.  
  3440.  
  3441. dists:
  3442. ; incbin "floordists"
  3443. drawit: dc.w 0
  3444.  
  3445. LineToUse: dc.l 0
  3446.  
  3447. ***************************
  3448. * Right then, time for the floor
  3449. * routine...
  3450. * For test purposes, give it
  3451. * a3 = point to screen
  3452. * d0= z distance away
  3453. * and sinval+cosval must be set up.
  3454. ***************************
  3455.  
  3456. leftedge: dc.w 0
  3457. rightedge: dc.w 0
  3458.  
  3459. rndpt: dc.l rndtab
  3460.  
  3461. WaterFloorLine:
  3462.  
  3463.  CACHE_OFF d2
  3464.  
  3465.  move.l rndpt,a2
  3466.  move.w (a2)+,d1
  3467.  move.w (a2)+,d2
  3468.  move.w (a2)+,d3
  3469.  cmp.l #endrnd-4,a2
  3470.  blt.s okrnd
  3471.  suba.w #98,a2
  3472. okrnd: 
  3473.  move.l a2,rndpt
  3474.  
  3475.  asr.w #6,d0
  3476.  move.w d0,d1
  3477.  move.w d0,d2
  3478.  move.w d0,d3
  3479.  move.l clipd(pc,d1.w*4),d1
  3480.  move.l clipd(pc,d2.w*4),d2
  3481.  move.l clipd(pc,d3.w*4),d3
  3482.  bra pcli
  3483.  
  3484.  dc.l 0
  3485. clipd:
  3486.  dc.l 0
  3487.  dc.l 512
  3488.  dc.l 512*2
  3489.  dc.l 512*3
  3490.  dc.l 512*4
  3491.  dc.l 512*5
  3492.  dc.l 512*6
  3493.  dc.l 512*7
  3494.  dc.l 512*8
  3495.  dc.l 512*9
  3496.  dc.l 512*10
  3497.  dc.l 512*11
  3498.  dc.l 512*12
  3499.  dc.l 512*13
  3500.  dc.l 512*14
  3501.  dc.l 512*15
  3502.  dc.l 512*15
  3503.  dc.l 512*15
  3504.  dc.l 512*15
  3505.  dc.l 512*15
  3506.  dc.l 512*15
  3507.  dc.l 512*15
  3508.  dc.l 512*15
  3509.  dc.l 512*15
  3510.  dc.l 512*15
  3511.  dc.l 512*15
  3512.  dc.l 512*15
  3513.  
  3514. pcli:
  3515.  
  3516.  move.l #brightentab,a2
  3517.  move.l a2,a4
  3518.  move.l a4,a5
  3519.  add.l d1,a2
  3520.  add.l d2,a4
  3521.  add.l d3,a5
  3522.  
  3523.  move.l #doacrossline,a1
  3524.  move.w leftedge(pc),d1
  3525.  move.w rightedge(pc),d2
  3526.  sub.w d1,d2
  3527.  move.w time(pc,d1.w*2),d1
  3528.  move.w time(pc,d2.w*2),d2
  3529.  lea (a1,d1.w),a1
  3530.  move.w (a1,d2.w),d4
  3531.  move.w #$4e75,(a1,d2.w)
  3532.  
  3533.  moveq #0,d0
  3534.  jsr (a1)
  3535.  move.w d4,(a1,d2.w)
  3536.  
  3537.  CACHE_ON d2
  3538.  
  3539.  rts
  3540.  
  3541. time:
  3542. val SET 0
  3543.  REPT 100
  3544.  dc.w val
  3545. val SET val+10
  3546.  ENDR
  3547.  
  3548. storeit: dc.l 0
  3549.  
  3550. doacrossline:
  3551.  incbin "Doacrossline"
  3552.  rts
  3553.  
  3554. dst: dc.w 0
  3555.  
  3556. FloorLine:
  3557.  
  3558.  move.l #floortile,a0
  3559.  adda.w whichtile,a0
  3560.  move.w lighttype,d1
  3561.  
  3562.  move.w d0,dst
  3563.  
  3564.  move.w d0,d2
  3565. *********************
  3566. * Old version
  3567.  asr.w #6,d2
  3568.  add.w #5,d1
  3569. *********************
  3570. ; asr.w #3,d2
  3571. ; sub.w #4,d2
  3572. ; cmp.w #6,d2
  3573. ; blt.s flbrbr
  3574. ; move.w #6,d2
  3575. ;flbrbr:
  3576. *********************
  3577.  add.w d2,d1
  3578.  bge.s .fixedbright
  3579.  moveq #0,d1
  3580. .fixedbright:
  3581.  cmp.w #28,d1
  3582.  ble.s .smallbright
  3583.  move.w #28,d1
  3584. .smallbright:
  3585.  lea floorscalecols,a1
  3586.  add.l floorbright(pc,d1.w*4),a1
  3587.  bra pastfloorbright
  3588.  
  3589. ConstCol: dc.w 0
  3590.  
  3591. BumpLine:
  3592.  
  3593.  tst.b smoothbumps
  3594.  beq.s Chunky
  3595.  
  3596.  move.l #SmoothTile,a0
  3597.  lea Smoothscalecols,a1
  3598.  bra pastast
  3599.  
  3600. Chunky:
  3601.  
  3602.  moveq #0,d2
  3603.  move.l #Bumptile,a0
  3604.  move.w whichtile,d2
  3605.  adda.w d2,a0
  3606.  ror.l #2,d2
  3607.  lsr.w #6,d2
  3608.  rol.l #2,d2
  3609.  and.w #15,d2
  3610.  move.l #ConstCols,a1
  3611.  move.w (a1,d2.w*2),ConstCol
  3612.  lea Bumpscalecols,a1
  3613.  
  3614. pastast:
  3615.  move.w lighttype,d1
  3616.  
  3617.  move.w d0,dst
  3618.  
  3619.  move.w d0,d2
  3620. *********************
  3621. * Old version
  3622.  asr.w #6,d2
  3623.  add.w #5,d1
  3624. *********************
  3625. ; asr.w #3,d2
  3626. ; sub.w #4,d2
  3627. ; cmp.w #6,d2
  3628. ; blt.s flbrbr
  3629. ; move.w #6,d2
  3630. ;flbrbr:
  3631. *********************
  3632.  add.w d2,d1
  3633.  bge.s .fixedbright
  3634.  moveq #0,d1
  3635. .fixedbright:
  3636.  cmp.w #28,d1
  3637.  ble.s .smallbright
  3638.  move.w #28,d1
  3639. .smallbright:
  3640.  add.l floorbright(pc,d1.w*4),a1
  3641.  bra pastfloorbright
  3642.  
  3643.  
  3644. floorbright:
  3645.  dc.l 512*0
  3646.  dc.l 512*1
  3647.  dc.l 512*1
  3648.  dc.l 512*2
  3649.  dc.l 512*2
  3650.  
  3651.  dc.l 512*3
  3652.  dc.l 512*3
  3653.  dc.l 512*4
  3654.  dc.l 512*4
  3655.  dc.l 512*5
  3656.  
  3657.  dc.l 512*5
  3658.  dc.l 512*6
  3659.  dc.l 512*6
  3660.  dc.l 512*7
  3661.  dc.l 512*7
  3662.  
  3663.  dc.l 512*8
  3664.  dc.l 512*8
  3665.  dc.l 512*9
  3666.  dc.l 512*9
  3667.  dc.l 512*10
  3668.  
  3669.  dc.l 512*10
  3670.  dc.l 512*11
  3671.  dc.l 512*11
  3672.  dc.l 512*12
  3673.  dc.l 512*12
  3674.  
  3675.  dc.l 512*13
  3676.  dc.l 512*13
  3677.  dc.l 512*14
  3678.  dc.l 512*14
  3679.  
  3680. widthleft: dc.w 0
  3681. scaleval: dc.w 0
  3682. sxoff: dc.w 0
  3683. szoff: dc.w 0
  3684. xoff34: dc.w 0
  3685. zoff34: dc.w 0
  3686. scosval: dc.w 0
  3687. ssinval: dc.w 0
  3688.  
  3689.  
  3690. floorsetbright:
  3691.  move.l #walltiles,a0
  3692.  
  3693. pastfloorbright
  3694.  
  3695.  
  3696.  move.w d0,d1
  3697.  muls cosval,d1    ; change in x across whole width
  3698.  move.w d0,d2
  3699.  muls sinval,d2    ; change in z across whole width
  3700.  neg.l d2
  3701. scaleprog:
  3702.  move.w scaleval(pc),d3
  3703.  beq.s .samescale
  3704.  bgt.s .scaledown
  3705.  neg.w d3
  3706.  asr.l d3,d1
  3707.  asr.l d3,d2
  3708.  bra.s .samescale
  3709. .scaledown:
  3710.  asl.l d3,d1
  3711.  asl.l d3,d2
  3712. .samescale
  3713.  
  3714.  move.l d1,d3 ;    z cos
  3715.  move.l d3,d6
  3716.  move.l d3,d5
  3717.  asr.l #1,d6
  3718.  add.l d6,d3
  3719.  asr.l #1,d3
  3720.  
  3721.  move.l d2,d4    ; z sin
  3722.  move.l d4,d6
  3723.  asr.l #1,d6
  3724.  add.l d4,d6
  3725.  add.l d3,d4
  3726.  neg.l d4    ; start x
  3727.  
  3728.  asr.l #1,d6    ; zsin/2
  3729.  sub.l d6,d5    ; start z
  3730.  
  3731.  move.w d4,startsmoothx
  3732.  move.w d5,startsmoothz
  3733.  
  3734.  swap d4
  3735.  asr.l #8,d5
  3736.  add.w szoff,d5
  3737.  add.w sxoff,d4
  3738.  and.w #63,d4
  3739.  and.w #63*256,d5
  3740.  move.b d4,d5
  3741.  
  3742.  asr.l #6,d1
  3743.  asr.l #6,d2
  3744.  move.w leftedge(pc),d6
  3745.  beq.s nomultleft
  3746.  
  3747.  move.l d1,d3
  3748.  asr.l #6,d3
  3749.  muls d6,d3
  3750.  asl.l #6,d3
  3751.  swap d3
  3752.  add.b d3,d5
  3753.  
  3754.  move.l d2,d3
  3755.  asr.l #6,d3
  3756.  muls d6,d3
  3757.  asl.l #6,d3
  3758.  swap d3
  3759.  lsl.w #8,d3
  3760.  add.w d3,d5
  3761.  
  3762. nomultleft:
  3763.  
  3764.  move.w d1,a4
  3765.  move.w d2,a5
  3766.  asr.l #8,d2
  3767.  and.w #%0011111100000000,d2
  3768.  swap d1
  3769.  add.w d1,d2
  3770.  move.w #%11111100111111,d1
  3771.  and.w d1,d5
  3772.  swap d5
  3773.  move.w startsmoothz,d5
  3774.  swap d5
  3775.  swap d2
  3776.  move.w a5,d2
  3777.  swap d2
  3778.  
  3779. ***********************************
  3780.  
  3781.  move.w d6,a2
  3782.  move.l d2,d6
  3783.  add.w #256,d6
  3784.  
  3785.  moveq #0,d0
  3786.  
  3787.  tst.w a2
  3788.  beq startatleftedge
  3789.  
  3790.  move.w widthleft(pc),d4
  3791.  
  3792.  move.w rightedge(pc),d3
  3793.  
  3794.  cmp.w #31,a2
  3795.  bgt.s notinfirststrip
  3796.  lea (a3,a2.w*4),a3
  3797.  cmp.w #32,d3
  3798.  ble.s allinfirststrip
  3799.  move.w #32,d7
  3800.  sub.w d7,d3
  3801.  sub.w a2,d7
  3802.  bra intofirststrip
  3803.  
  3804. allinfirststrip
  3805.  sub.w a2,d3
  3806.  move.w d3,d7
  3807.  move.w #0,d4
  3808.  bra allintofirst
  3809.  
  3810. notinfirststrip:
  3811.  sub.w #32,a2
  3812.  sub.w #32,d3
  3813.  adda.w #33*4,a3
  3814.  cmp.w #31,a2
  3815.  bgt.s notstartinsec
  3816.  lea (a3,a2.w*4),a3
  3817.  cmp.w #32,d3
  3818.  ble.s allinsecstrip
  3819.  move.w #32,d7
  3820.  sub.w d7,d3
  3821.  sub.w a2,d7
  3822.  move.w d3,d4
  3823.  bra tstwat
  3824.  
  3825. allinsecstrip
  3826.  sub.w a2,d3
  3827.  move.w d3,d7
  3828.  move.w #0,d4
  3829.  bra tstwat
  3830.  rts
  3831.  
  3832. prot8: dc.w 0
  3833.  
  3834. notstartinsec:
  3835.  sub.w #32,a2
  3836.  sub.w #32,d3
  3837.  adda.w #33*4,a3
  3838.  lea (a3,a2.w*4),a3
  3839.  cmp.w #32,d3
  3840.  ble.s allinthirdstrip
  3841.  move.w #32,d7
  3842.  sub.w d7,d3
  3843.  sub.w a2,d7
  3844.  move.w d3,d4
  3845.  bra tstwat
  3846.  rts
  3847.  
  3848. allinthirdstrip
  3849.  sub.w a2,d3
  3850.  move.w d3,d7
  3851.  move.w #0,d4
  3852.  bra tstwat
  3853.  rts
  3854.  
  3855. startatleftedge:
  3856.  
  3857.  move.w rightedge(pc),d3
  3858.  sub.w a2,d3
  3859.  
  3860.  move.w d3,d7
  3861.  cmp.w #32,d7
  3862.  ble.s .notoowide
  3863.  move.w #32,d7
  3864. .notoowide:
  3865.  sub.w d7,d3
  3866. intofirststrip:
  3867.  
  3868.  move.w d3,d4
  3869. allintofirst:
  3870.  
  3871.  move.w startsmoothx,d3
  3872.  
  3873. tstwat:
  3874.  
  3875.  tst.b usewater
  3876.  bne texturedwater
  3877.  
  3878.  
  3879. ******************************
  3880. * BumpMap the floor/ceiling! *
  3881.  tst.b usebumps
  3882.  bne.s BumpMap
  3883. ******************************
  3884.  
  3885. ordinary:
  3886.  moveq #0,d0
  3887.  
  3888.  dbra d7,acrossscrn
  3889.  rts
  3890.  
  3891. usebumps: dc.w $0
  3892. smoothbumps: dc.w $0
  3893.  
  3894.  include "ab3:source/bumpmap.s"
  3895.  
  3896.  CNOP 0,4
  3897. backbefore:
  3898.  and.w d1,d5
  3899.  move.b (a0,d5.w*4),d0
  3900.  move.w (a1,d0.w*2),(a3)
  3901.  addq #4,a3
  3902.  add.w a4,d3
  3903.  addx.l d6,d5
  3904.  dbcs d7,acrossscrn
  3905.  dbcc d7,backbefore
  3906.  bcc.s past1
  3907.  add.w #256,d5 
  3908.  bra.s past1
  3909.  
  3910. acrossscrn:
  3911.  and.w d1,d5
  3912.  move.b (a0,d5.w*4),d0
  3913.  move.w (a1,d0.w*2),(a3)
  3914.  addq #4,a3
  3915.  add.w a4,d3
  3916.  addx.l d2,d5
  3917.  dbcs d7,acrossscrn
  3918.  dbcc d7,backbefore
  3919.  bcc.s past1
  3920.  add.w #256,d5 
  3921. past1:
  3922.  
  3923.  move.w d4,d7
  3924.  bne.s .notdoneyet
  3925.  CACHE_FREEZE_ON d2
  3926.  rts
  3927. .notdoneyet:
  3928.  
  3929.  cmp.w #32,d7
  3930.  ble.s .notoowide
  3931.  move.w #32,d7
  3932. .notoowide
  3933.  sub.w d7,d4  
  3934.  addq #4,a3
  3935.  
  3936.  dbra d7,acrossscrn
  3937.  CACHE_FREEZE_ON d2
  3938.  rts
  3939.  
  3940. waterpt: dc.l waterlist
  3941.  
  3942. waterlist:
  3943.  dc.l waterfile
  3944.  dc.l waterfile+2
  3945.  dc.l waterfile+256
  3946.  dc.l waterfile+256+2
  3947.  dc.l waterfile+512
  3948.  dc.l waterfile+512+2
  3949.  dc.l waterfile+768
  3950.  dc.l waterfile+768+2
  3951. ; dc.l waterfile+768
  3952. ; dc.l waterfile+512+2
  3953. ; dc.l waterfile+512
  3954. ; dc.l waterfile+256+2
  3955. ; dc.l waterfile+256
  3956. ; dc.l waterfile+2
  3957. endwaterlist:
  3958.  
  3959. watertouse: dc.l waterfile
  3960.  
  3961. wtan: dc.w 0
  3962. wateroff: dc.w 0
  3963.  
  3964. texturedwater:
  3965.  
  3966.  add.w wateroff,d5
  3967.  
  3968.  move.l #brightentab,a1
  3969.  move.w dst,d0
  3970.  clr.b d0
  3971.  add.w d0,d0
  3972.  adda.w d0,a1
  3973.  
  3974.  move.w dst,d0
  3975.  asl.w #7,d0
  3976.  add.w wtan,d0
  3977.  and.w #8191,d0
  3978.  move.l #SineTable,a0
  3979.  move.w (a0,d0.w),d0
  3980.  ext.l d0
  3981.  move.w dst,d3
  3982.  add.w #300,d3
  3983.  divs d3,d0
  3984.  asr.w #6,d0
  3985.  add.w #2,d0
  3986.  
  3987.  move.w dst,d3
  3988.  asr.w #7,d3
  3989.  add.w d3,d0
  3990.  
  3991.  muls #104*4,d0
  3992.  move.w d0,a6
  3993.  
  3994.  move.l watertouse,a0
  3995.  
  3996.  move.w startsmoothx,d3
  3997.  dbra d7,acrossscrnw
  3998.  rts
  3999.  
  4000. backbeforew:
  4001.  and.w d1,d5
  4002.  move.w (a0,d5.w*4),d0
  4003.  move.b 1(a3,a6.w),d0
  4004.  move.w (a1,d0.w*2),(a3)
  4005.  addq #4,a3
  4006.  add.w a4,d3
  4007.  addx.l d6,d5
  4008.  dbcs d7,acrossscrnw
  4009.  dbcc d7,backbeforew
  4010.  bcc.s past1w
  4011.  add.w #256,d5 
  4012.  bra.s past1w
  4013.  
  4014. acrossscrnw:
  4015.  and.w d1,d5
  4016.  move.w (a0,d5.w*4),d0
  4017.  move.b 1(a3,a6.w),d0
  4018.  move.w (a1,d0.w*2),(a3)
  4019.  addq #4,a3
  4020.  add.w a4,d3
  4021.  addx.l d2,d5
  4022.  dbcs d7,acrossscrnw
  4023.  dbcc d7,backbeforew
  4024.  bcc.s past1w
  4025.  add.w #256,d5 
  4026. past1w:
  4027.  
  4028.  move.w d4,d7
  4029.  bne.s .notdoneyet
  4030.  rts
  4031. .notdoneyet:
  4032.  
  4033.  cmp.w #32,d7
  4034.  ble.s .notoowide
  4035.  move.w #32,d7
  4036. .notoowide
  4037.  sub.w d7,d4  
  4038.  addq #4,a3
  4039.  
  4040.  dbra d7,acrossscrnw
  4041.  CACHE_FREEZE_ON d2
  4042.  rts
  4043.  
  4044. usewater: dc.w 0
  4045. startsmoothx: dc.w 0
  4046. startsmoothz: dc.w 0
  4047.  
  4048. ********************************
  4049. *
  4050.  include "AB3:source/ObjDraw3.chipram"
  4051. *
  4052. ********************************
  4053.  
  4054. numframes:
  4055.  dc.w 0
  4056.  
  4057. alframe: dc.l Objects+4096
  4058.  
  4059. alan:
  4060.  dcb.l 4,0
  4061.  dcb.l 4,1
  4062.  dcb.l 4,2
  4063.  dcb.l 4,3
  4064. endalan:
  4065.  
  4066. alanptr: dc.l alan
  4067.  
  4068. Time2: dc.l 0
  4069. dispco:
  4070.  dc.w 0
  4071.  
  4072. KInt_Init    ;VBR Assumed $0
  4073.         move.l $68.w,OLDKINT
  4074.         Move.l    #KInt_Main,$68.w    Install Interrupt 
  4075.         And.b    #$3f,$bfe201        Set Timers
  4076.         Move.b    #$7f,$bfed01
  4077.         Move.b    $bfed01,d0
  4078.         Move.b    #$88,$bfed01
  4079.         St.b    KInt_CCode        
  4080.         Move.b    #$a0,$bfee01        Start Timey Thing
  4081.         Rts                And return
  4082.  
  4083. OLDKINT: dc.l 0
  4084.  
  4085. KInt_Main    
  4086.         Movem.l    d0/d1/a0/a1/a6,-(a7)    Stack everything
  4087.         Move.w    #8,$dff09a        Temp Disable Int.
  4088.         Move.w    $dff01e,d0        Intreqr
  4089.         And.w    #8,d0            Mask Out All X^ K_Int
  4090.     Beq    KInt_End            Not Keyboard Interrupt
  4091.         Lea    $bfed01,a6
  4092.         Move.w    #$8,$dff09c        Clear Int.Request
  4093.         Move.b    -$100(a6),d0        Move Raw Keyboard value
  4094.         Ror.b    #1,d0            Roll to correct
  4095.         Not.b    d0            
  4096.         Move.b    d0,KInt_CCode        Save Corrected Keycode
  4097. .HandShake    Move.b    #8,(a6)
  4098.         Move.b    #7,-$900(a6)
  4099.         Move.b    #0,-$800(a6)
  4100.         Move.b    #0,-$100(a6)
  4101.         Move.b    #$d1,$100(a6)        
  4102.         Tst.b    (a6)    
  4103. .wait        Btst    #0,(a6)
  4104.     Beq.s    .wait
  4105.         Move.b    #$a0,$100(a6)        
  4106.         Move.b    (a6),d0        
  4107.         Move.b    #$88,(a6)
  4108.         Lea    KeyMap,a1
  4109.         Moveq.w    #0,d0
  4110.         Move.b    KInt_CCode(pc),d0
  4111.     Bmi.s    KInt_KeyUp            neg if up 
  4112.  
  4113. KInt_KeyDown
  4114.         st (a1,d0.w)
  4115.     Bra    KInt_End
  4116.  
  4117. KInt_KeyUp
  4118.         And.w    #$7f,d0            Make code Positive
  4119.         clr.b (a1,d0.w)
  4120. KInt_End    Movem.l    (a7)+,d0/d1/a0/a1/a6    Unstack Everything
  4121.     
  4122.         Move.w    #$8008,$dff09a        Re-enable Int.
  4123.         Rte
  4124.  
  4125. KInt_CCode    Ds.b    1
  4126. KInt_Askey    Ds.b    1
  4127. KInt_OCode    Ds.w    1
  4128.  
  4129.  
  4130. PLR1_mouse_control
  4131.  jsr ReadMouse
  4132.  jsr PLR1_alwayskeys
  4133.  move.l #SineTable,a0
  4134.  move.w PLR1s_angspd,d1
  4135.  move.w PLR1s_angpos,d0
  4136.  and.w #8190,d0
  4137.  move.w (a0,d0.w),PLR1s_sinval
  4138.  adda.w #2048,a0
  4139.  move.w (a0,d0.w),PLR1s_cosval
  4140.  
  4141.  move.l PLR1s_xspdval,d6
  4142.  move.l PLR1s_zspdval,d7
  4143.  
  4144.  neg.l d6
  4145.  ble.s .nobug1
  4146.  asr.l #1,d6
  4147.  add.l #1,d6
  4148.  bra.s .bug1
  4149. .nobug1
  4150.  asr.l #1,d6
  4151. .bug1:
  4152.  
  4153.  neg.l d7
  4154.  ble.s .nobug2
  4155.  asr.l #1,d7
  4156.  add.l #1,d7
  4157.  bra.s .bug2
  4158. .nobug2
  4159.  asr.l #1,d7
  4160. .bug2: 
  4161.  
  4162.  
  4163.  move.w ymouse,d3
  4164.  sub.w oldymouse,d3
  4165.  add.w d3,oldymouse
  4166.  asr.w #1,d3
  4167.  cmp.w #50,d3
  4168.  ble.s nofastfor
  4169.  move.w #50,d3
  4170. nofastfor:
  4171.  cmp.w #-50,d3
  4172.  bge.s nofastback
  4173.  move.w #-50,d3
  4174. nofastback:
  4175.  
  4176.  tst.b Ducked
  4177.  beq.s .nohalve
  4178.  asr.w #1,d3
  4179. .nohalve
  4180.  
  4181.  move.w d3,d2
  4182.  asl.w #3,d2
  4183.  move.w d2,d1
  4184.  add.w d2,d1
  4185.  add.w d2,d1
  4186.  add.w Bobble,d1
  4187.  and.w #8190,d1
  4188.  move.w d1,Bobble
  4189.  
  4190.  move.w PLR1s_sinval,d1
  4191.  move.w PLR1s_cosval,d2
  4192.  
  4193.  move.w d2,d4
  4194.  move.w d1,d5
  4195.  muls lrs,d4
  4196.  muls lrs,d5
  4197.  
  4198.  
  4199.  muls d3,d2
  4200.  muls d3,d1
  4201.  sub.l d4,d1
  4202.  add.l d5,d2
  4203.  
  4204.  sub.l d1,d6
  4205.  sub.l d2,d7
  4206.  add.l d6,PLR1s_xspdval
  4207.  add.l d7,PLR1s_zspdval
  4208.  move.l PLR1s_xspdval,d6
  4209.  move.l PLR1s_zspdval,d7
  4210.  add.l d6,PLR1s_xoff
  4211.  add.l d7,PLR1s_zoff
  4212.  
  4213.  tst.b PLR1_fire
  4214.  beq.s .firenotpressed
  4215. ; fire was pressed last time.
  4216.  btst #6,$bfe001
  4217.  bne.s .firenownotpressed
  4218. ; fire is still pressed this time.
  4219.  st PLR1_fire
  4220.  bra .doneplr1
  4221.  
  4222. .firenownotpressed:
  4223. ; fire has been released.
  4224.  clr.b PLR1_fire
  4225.  bra .doneplr1
  4226.  
  4227. .firenotpressed
  4228.  
  4229. ; fire was not pressed last frame...
  4230.  
  4231.  btst #6,$bfe001
  4232. ; if it has still not been pressed, go back above
  4233.  bne.s .firenownotpressed
  4234. ; fire was not pressed last time, and was this time, so has
  4235. ; been clicked.
  4236.  st PLR1_clicked
  4237.  st PLR1_fire
  4238.  
  4239. .doneplr1:
  4240.  move.l PLR1s_tyoff,d0
  4241.  move.l PLR1s_yoff,d1
  4242.  move.l PLR1s_yvel,d2
  4243.  sub.l d1,d0
  4244.  bgt.s .aboveground
  4245.  sub.l #1024,d2
  4246.  blt.s .notfast
  4247.  sub.l #2048,d2
  4248. .notfast:
  4249.  add.l d2,d1
  4250.  sub.l d2,d0
  4251.  blt.s .pastitall
  4252.  move.l #0,d2
  4253.  add.l d0,d1
  4254.  bra.s .pastitall
  4255.  
  4256. .aboveground:
  4257.  add.l d2,d1
  4258.  add.l #1024,d2
  4259. .pastitall:
  4260.  
  4261.  move.l d2,PLR1s_yvel
  4262.  move.l d1,PLR1s_yoff
  4263.  
  4264.  rts
  4265.  
  4266. PLR1_follow_path:
  4267.  
  4268.  move.l pathpt,a0
  4269.  move.w (a0),d1
  4270.  move.w d1,PLR1s_xoff
  4271.  move.w 2(a0),d1
  4272.  move.w d1,PLR1s_zoff
  4273.  move.w 4(a0),d0
  4274.  add.w d0,d0
  4275.  and.w #8190,d0
  4276.  move.w d0,PLR1_angpos
  4277.  
  4278.  move.w TempFrames,d0
  4279.  asl.w #3,d0
  4280.  adda.w d0,a0
  4281.  
  4282.  cmp.l #endpath,a0
  4283.  blt notrestartpath
  4284.  move.l #Path,a0
  4285. notrestartpath:
  4286.  move.l a0,pathpt
  4287.  
  4288.  rts
  4289.  
  4290. OldSpace: dc.b 0
  4291. SpaceTapped: dc.b 0
  4292. SPCTAP: dc.b 0
  4293. Ducked: dc.b 0
  4294.  even
  4295.  
  4296. PLR1_alwayskeys
  4297.  move.l #KeyMap,a5
  4298.  move.b $40(a5),d1
  4299.  beq.s nottapped
  4300.  tst.b OldSpace
  4301.  bne.s nottapped
  4302.  st SpaceTapped
  4303. nottapped:
  4304.  move.b d1,OldSpace
  4305.  
  4306.  tst.b $22(a5)
  4307.  beq.s notduck
  4308.  clr.b $22(a5)
  4309.  move.l #playerheight,PLR1s_targheight
  4310.  not.b Ducked
  4311.  beq.s notduck
  4312.  move.l #playercrouched,PLR1s_targheight
  4313. notduck:
  4314.  
  4315.  move.l PLR1_Roompt,a4
  4316.  move.l ToZoneFloor(a4),d0
  4317.  sub.l ToZoneRoof(a4),d0
  4318.  tst.b PLR1_StoodInTop
  4319.  beq.s usebottom
  4320.  move.l ToUpperFloor(a4),d0
  4321.  sub.l ToUpperRoof(a4),d0
  4322. usebottom:
  4323.  
  4324.  cmp.l #playerheight+3*1024,d0
  4325.  bgt.s oktostand
  4326.  st Ducked
  4327.  move.l #playercrouched,PLR1s_targheight
  4328. oktostand:
  4329.  
  4330.  move.l PLR1s_height,d0
  4331.  move.l PLR1s_targheight,d1
  4332.  cmp.l d1,d0
  4333.  beq.s noupordown
  4334.  bgt.s crouch
  4335.  add.l #1024,d0
  4336.  bra noupordown
  4337. crouch:
  4338.  sub.l #1024,d0
  4339. noupordown:
  4340.  move.l d0,PLR1s_height
  4341.  
  4342.  tst.b $27(a5)
  4343.  beq.s notselkey
  4344.  st PLR1KEYS
  4345.  clr.b PLR1PATH
  4346.  clr.b PLR1MOUSE
  4347.  clr.b PLR1JOY
  4348. notselkey:
  4349.  
  4350.  tst.b $26(a5)
  4351.  beq.s notseljoy
  4352.  clr.b PLR1KEYS
  4353.  clr.b PLR1PATH
  4354.  clr.b PLR1MOUSE
  4355.  st PLR1JOY
  4356. notseljoy:
  4357.  
  4358.  tst.b $37(a5)
  4359.  beq.s notselmouse
  4360.  clr.b PLR1KEYS
  4361.  clr.b PLR1PATH
  4362.  st PLR1MOUSE
  4363.  clr.b PLR1JOY
  4364. notselmouse:
  4365.  
  4366.  lea 1(a5),a4
  4367.  lea GunData,a3
  4368.  moveq #0,d0
  4369.  move.w #4,d1
  4370. pickweap
  4371.  tst.b (a4)+
  4372.  beq.s notgotweap
  4373.  tst.b 7(a3)
  4374.  beq.s notgotweap
  4375.  move.b d0,GunSelected
  4376. notgotweap
  4377.  addq #1,d0
  4378.  adda.w #16,a3
  4379.  dbra d1,pickweap
  4380.  
  4381.  rts
  4382.  
  4383. PLR1_keyboard_control:
  4384.  
  4385.  move.l #SineTable,a0
  4386.  
  4387.  jsr PLR1_alwayskeys
  4388.  move.l #KeyMap,a5
  4389.  
  4390.  move.w PLR1s_angpos,d0
  4391.  move.w #70,d1
  4392.  move.w #7,d2
  4393.  tst.b $61(a5)
  4394.  beq.s nofaster
  4395.  move.w #120,d1
  4396.  move.w #10,d2
  4397. nofaster:
  4398.  tst.b Ducked
  4399.  beq.s .nohalve
  4400.  asr.w #1,d2
  4401. .nohalve
  4402.  
  4403.  moveq #0,d4 
  4404. ; tst.b $67(a5)
  4405. ; bne.s slidelr
  4406.  
  4407.  tst.b $4f(a5)
  4408.  beq.s noleftturn
  4409.  sub.w d1,d0
  4410. noleftturn
  4411.  move.l #KeyMap,a5
  4412.  tst.b $4e(a5)
  4413.  beq.s norightturn
  4414.  add.w d1,d0
  4415. norightturn
  4416. ; bra.s noslide
  4417.  
  4418. slidelr:
  4419.  tst.b $39(a5)
  4420.  beq.s noleftslide
  4421.  move.w d2,d4
  4422.  asr.w #1,d4
  4423. noleftslide
  4424.  move.l #KeyMap,a5
  4425.  tst.b $3a(a5)
  4426.  beq.s norightslide
  4427.  sub.w d2,d4
  4428.  asr.w #1,d4
  4429. norightslide
  4430.   
  4431. noslide:
  4432.   
  4433.  and.w #8191,d0
  4434.  move.w d0,PLR1s_angpos
  4435.  
  4436.  move.w (a0,d0.w),PLR1s_sinval
  4437.  adda.w #2048,a0
  4438.  move.w (a0,d0.w),PLR1s_cosval
  4439.  
  4440.  move.l PLR1s_xspdval,d6
  4441.  move.l PLR1s_zspdval,d7
  4442.  
  4443.  neg.l d6
  4444.  ble.s .nobug1
  4445.  asr.l #1,d6
  4446.  add.l #1,d6
  4447.  bra.s .bug1
  4448. .nobug1
  4449.  asr.l #1,d6
  4450. .bug1:
  4451.  
  4452.  neg.l d7
  4453.  ble.s .nobug2
  4454.  asr.l #1,d7
  4455.  add.l #1,d7
  4456.  bra.s .bug2
  4457. .nobug2
  4458.  asr.l #1,d7
  4459. .bug2: 
  4460.  
  4461.  moveq #0,d3
  4462.  
  4463.  tst.b $4c(a5)
  4464.  beq.s noforward
  4465.  neg.w d2
  4466.  move.w d2,d3
  4467.  
  4468. noforward:
  4469.  tst.b $4d(a5)
  4470.  beq.s nobackward
  4471.  move.w d2,d3
  4472. nobackward:
  4473.  
  4474.  move.w d3,d2
  4475.  asl.w #3,d2
  4476.  move.w d2,d1
  4477.  add.w d2,d1
  4478.  add.w d2,d1
  4479.  add.w Bobble,d1
  4480.  and.w #8190,d1
  4481.  move.w d1,Bobble
  4482.  
  4483.  move.w PLR1s_sinval,d1
  4484.  muls d3,d1
  4485.  move.w PLR1s_cosval,d2
  4486.  muls d3,d2
  4487.  
  4488.  sub.l d1,d6
  4489.  sub.l d2,d7
  4490.  move.w PLR1s_sinval,d1
  4491.  muls d4,d1
  4492.  move.w PLR1s_cosval,d2
  4493.  muls d4,d2
  4494.  sub.l d2,d6
  4495.  add.l d1,d7
  4496.  
  4497.  add.l d6,PLR1s_xspdval
  4498.  add.l d7,PLR1s_zspdval
  4499.  move.l PLR1s_xspdval,d6
  4500.  move.l PLR1s_zspdval,d7
  4501.  add.l d6,PLR1s_xoff
  4502.  add.l d7,PLR1s_zoff
  4503.  
  4504.  tst.b PLR1_fire
  4505.  beq.s .firenotpressed
  4506. ; fire was pressed last time.
  4507.  tst.b $65(a5)
  4508.  beq.s .firenownotpressed
  4509. ; fire is still pressed this time.
  4510.  st PLR1_fire
  4511.  bra .doneplr1
  4512.  
  4513. .firenownotpressed:
  4514. ; fire has been released.
  4515.  clr.b PLR1_fire
  4516.  bra .doneplr1
  4517.  
  4518. .firenotpressed
  4519.  
  4520. ; fire was not pressed last frame...
  4521.  
  4522.  tst.b $65(a5)
  4523. ; if it has still not been pressed, go back above
  4524.  beq.s .firenownotpressed
  4525. ; fire was not pressed last time, and was this time, so has
  4526. ; been clicked.
  4527.  st PLR1_clicked
  4528.  st PLR1_fire
  4529.  
  4530. .doneplr1:
  4531.  
  4532.  move.l PLR1s_tyoff,d0
  4533.  move.l PLR1s_yoff,d1
  4534.  move.l PLR1s_yvel,d2
  4535.  sub.l d1,d0
  4536.  bgt.s .aboveground
  4537.  sub.l #512,d2
  4538.  blt.s .notfast
  4539.  move.l #0,d2
  4540. .notfast:
  4541.  add.l d2,d1
  4542.  sub.l d2,d0
  4543.  blt.s .pastitall
  4544.  move.l #0,d2
  4545.  add.l d0,d1
  4546.  bra.s .pastitall
  4547.  
  4548. .aboveground:
  4549.  add.l d2,d1
  4550.  add.l #1024,d2
  4551. .pastitall:
  4552.  
  4553.  move.l d2,PLR1s_yvel
  4554.  move.l d1,PLR1s_yoff
  4555.  
  4556.  rts
  4557. passspace:
  4558.  ds.l 400 
  4559.  
  4560. PLR1_JoyStick_control:
  4561.  
  4562.  move.l #KeyMap,a5
  4563.  move.l #SineTable,a0
  4564.  
  4565.  btst #1,$dff00c
  4566.  sne d0
  4567.  btst #1,$dff00d
  4568.  sne d1
  4569.  btst #0,$dff00c
  4570.  sne d2
  4571.  btst #0,$dff00d
  4572.  sne d3
  4573.  btst #7,$bfe001
  4574.  seq $65(a5)
  4575.  
  4576.  move.b d0,$4f(a5)
  4577.  move.b d1,$4e(a5)
  4578.  eor.b d0,d2
  4579.  move.b d2,$4c(a5)
  4580.  eor.b d1,d3
  4581.  move.b d3,$4d(a5)
  4582.  
  4583.  jsr PLR1_alwayskeys
  4584.  
  4585.  move.w PLR1s_angpos,d0
  4586.  move.w #70,d1
  4587.  move.w #7,d2
  4588.  tst.b $61(a5)
  4589.  beq.s .nofaster
  4590.  move.w #120,d1
  4591.  move.w #10,d2
  4592. .nofaster:
  4593.  
  4594.  tst.b Ducked
  4595.  beq.s .nohalve
  4596.  asr.w #1,d2
  4597. .nohalve:
  4598.  
  4599.  moveq #0,d4 
  4600. ; tst.b $67(a5)
  4601. ; bne.s slidelr
  4602.  
  4603.  tst.b $4f(a5)
  4604.  beq.s .noleftturn
  4605.  sub.w d1,d0
  4606. .noleftturn
  4607.  move.l #KeyMap,a5
  4608.  tst.b $4e(a5)
  4609.  beq.s .norightturn
  4610.  add.w d1,d0
  4611. .norightturn
  4612. ; bra.s noslide
  4613.  
  4614. .slidelr:
  4615.  tst.b $39(a5)
  4616.  beq.s .noleftslide
  4617.  move.w d2,d4
  4618.  asr.w #1,d4
  4619. .noleftslide
  4620.  move.l #KeyMap,a5
  4621.  tst.b $3a(a5)
  4622.  beq.s .norightslide
  4623.  sub.w d2,d4
  4624.  asr.w #1,d4
  4625. .norightslide
  4626.   
  4627. .noslide:
  4628.   
  4629.  and.w #8191,d0
  4630.  move.w d0,PLR1s_angpos
  4631.  
  4632.  move.w (a0,d0.w),PLR1s_sinval
  4633.  adda.w #2048,a0
  4634.  move.w (a0,d0.w),PLR1s_cosval
  4635.  
  4636.  move.l PLR1s_xspdval,d6
  4637.  move.l PLR1s_zspdval,d7
  4638.  
  4639.  neg.l d6
  4640.  ble.s .nobug1
  4641.  asr.l #1,d6
  4642.  add.l #1,d6
  4643.  bra.s .bug1
  4644. .nobug1
  4645.  asr.l #1,d6
  4646. .bug1:
  4647.  
  4648.  neg.l d7
  4649.  ble.s .nobug2
  4650.  asr.l #1,d7
  4651.  add.l #1,d7
  4652.  bra.s .bug2
  4653. .nobug2
  4654.  asr.l #1,d7
  4655. .bug2: 
  4656.  
  4657.  moveq #0,d3
  4658.  
  4659.  tst.b $4c(a5)
  4660.  beq.s .noforward
  4661.  neg.w d2
  4662.  move.w d2,d3
  4663. .noforward:
  4664.  tst.b $4d(a5)
  4665.  beq.s .nobackward
  4666.  move.w d2,d3
  4667. .nobackward:
  4668.  
  4669.  move.w d3,d2
  4670.  asl.w #3,d2
  4671.  move.w d2,d1
  4672.  add.w d2,d1
  4673.  add.w d2,d1
  4674.  add.w Bobble,d1
  4675.  and.w #8190,d1
  4676.  move.w d1,Bobble
  4677.  
  4678.  move.w PLR1s_sinval,d1
  4679.  muls d3,d1
  4680.  move.w PLR1s_cosval,d2
  4681.  muls d3,d2
  4682.  
  4683.  sub.l d1,d6
  4684.  sub.l d2,d7
  4685.  move.w PLR1s_sinval,d1
  4686.  muls d4,d1
  4687.  move.w PLR1s_cosval,d2
  4688.  muls d4,d2
  4689.  sub.l d2,d6
  4690.  add.l d1,d7
  4691.  
  4692.  add.l d6,PLR1s_xspdval
  4693.  add.l d7,PLR1s_zspdval
  4694.  move.l PLR1s_xspdval,d6
  4695.  move.l PLR1s_zspdval,d7
  4696.  add.l d6,PLR1s_xoff
  4697.  add.l d7,PLR1s_zoff
  4698.  
  4699.  tst.b PLR1_fire
  4700.  beq.s .firenotpressed
  4701. ; fire was pressed last time.
  4702.  tst.b $65(a5)
  4703.  beq.s .firenownotpressed
  4704. ; fire is still pressed this time.
  4705.  st PLR1_fire
  4706.  bra .doneplr1
  4707.  
  4708. .firenownotpressed:
  4709. ; fire has been released.
  4710.  clr.b PLR1_fire
  4711.  bra .doneplr1
  4712.  
  4713. .firenotpressed
  4714.  
  4715. ; fire was not pressed last frame...
  4716.  
  4717.  tst.b $65(a5)
  4718. ; if it has still not been pressed, go back above
  4719.  beq.s .firenownotpressed
  4720. ; fire was not pressed last time, and was this time, so has
  4721. ; been clicked.
  4722.  st PLR1_clicked
  4723.  st PLR1_fire
  4724.  
  4725. .doneplr1:
  4726.  
  4727.  move.l PLR1s_tyoff,d0
  4728.  move.l PLR1s_yoff,d1
  4729.  move.l PLR1s_yvel,d2
  4730.  sub.l d1,d0
  4731.  bgt.s .aboveground
  4732.  sub.l #512,d2
  4733.  blt.s .notfast
  4734.  move.l #0,d2
  4735. .notfast:
  4736.  add.l d2,d1
  4737.  sub.l d2,d0
  4738.  blt.s .pastitall
  4739.  move.l #0,d2
  4740.  add.l d0,d1
  4741.  bra.s .pastitall
  4742.  
  4743. .aboveground:
  4744.  add.l d2,d1
  4745.  add.l #1024,d2
  4746. .pastitall:
  4747.  
  4748.  move.l d2,PLR1s_yvel
  4749.  move.l d1,PLR1s_yoff
  4750.  
  4751.  rts
  4752.  
  4753. prot7: dc.w 0
  4754. SendToSlave:
  4755.  
  4756. ; First of all, position of player
  4757.  
  4758.  jsr INITSEND
  4759.  
  4760.  move.w PLR1_xoff,d0
  4761.  swap d0
  4762.  move.w PLR1_zoff,d0
  4763.  jsr SENDLONG
  4764.  
  4765.  move.l PLR1_yoff,d0
  4766.  jsr SENDLONG
  4767.  
  4768.  move.b PLR1_StoodInTop,d0
  4769.  lsl.w #8,d0
  4770.  move.l PLR1_Roompt,a2
  4771.  move.b 1(a2),d0
  4772.  swap d0
  4773.  move.w PLR1_angpos,d0
  4774.  jsr SENDLONG
  4775.  
  4776.  move.l ObjectData,a5
  4777.  move.l ObjectPoints,a6
  4778. SendObjLoop
  4779.  move.w (a5),d1
  4780.  blt.s lastonedone
  4781.  move.w 12(a5),d2
  4782.  blt.s notthisonedear
  4783.  tst.b worry(a5)
  4784.  beq.s notthisonedear
  4785.  move.w (a6,d1.w*8),d0
  4786.  swap d0
  4787.  move.w 4(a6,d1.w*8),d0
  4788.  jsr SENDLONG
  4789.  move.w 4(a5),d0
  4790.  swap d0
  4791.  clr.w d0
  4792.  move.b d2,d0
  4793.  lsl.w #8,d0
  4794.  move.b ObjInTop(a5),d0
  4795.  jsr SENDLONG
  4796.  move.w 6(a5),d0
  4797.  swap d0
  4798.  move.w 14(a5),d0
  4799.  jsr SENDLONG
  4800.  move.l 8(a5),d0
  4801.  jsr SENDLONG
  4802.  
  4803. notthisonedear:
  4804.  add.w #64,a5
  4805.  bra SendObjLoop
  4806.  
  4807. lastonedone:
  4808.  
  4809.  move.l #$80000000,d0
  4810.  jsr SENDLAST
  4811.  
  4812.  rts
  4813.  
  4814. GOTTOSEND: dc.w 0
  4815.  
  4816. OtherInter:
  4817.  move.w #$0010,$dff000+intreq
  4818.  movem.l d0-d7/a0-a6,-(a7)
  4819.  bra.s justshake
  4820.  
  4821. Chan0inter:
  4822.  
  4823.  move.w #$0010,$dff000+intreq
  4824.  
  4825.  tst.b doanything
  4826.  bne.s dosomething
  4827.  rte
  4828.  
  4829. dosomething:
  4830.  
  4831.  
  4832.  addq.w #1,FramesToDraw
  4833.  tst.b counting
  4834.  beq nostopcounter
  4835.  JSR STOPCOUNTNOADD
  4836. nostopcounter:
  4837.  movem.l d0-d7/a0-a6,-(a7)
  4838.  
  4839. ; jsr INITREC
  4840. ; jsr RECEIVE
  4841.  
  4842. ; tst.l BUFFER
  4843. ; beq.s justshake
  4844. ; st GOTTOSEND
  4845. ; move.l #OtherInter,$6c
  4846.  
  4847. justshake:
  4848.  
  4849.  cmp.b #'b',Prefsfile+3
  4850.  bne.s .noback
  4851.  jsr mt_music
  4852. .noback:
  4853.  
  4854.  bra dontshowtime
  4855.  
  4856.  tst.b oktodisplay
  4857.  beq dontshowtime
  4858.  clr.b oktodisplay
  4859.  subq.w #1,dispco
  4860.  bgt dontshowtime
  4861.  move.w #10,dispco
  4862.  
  4863.  move.l #TimerScr+10,a0
  4864.  move.l TimeCount,d0
  4865.  bge.s timenotneg
  4866.  move.l #1111*256,d0
  4867. timenotneg:
  4868.  asr.l #8,d0
  4869.  move.l #digits,a1
  4870.  move.w #7,d2
  4871. digitlop
  4872.  divs #10,d0
  4873.  swap d0
  4874.  lea (a1,d0.w*8),a2
  4875.  move.b (a2)+,(a0)
  4876.  move.b (a2)+,24(a0)
  4877.  move.b (a2)+,24*2(a0)
  4878.  move.b (a2)+,24*3(a0)
  4879.  move.b (a2)+,24*4(a0)
  4880.  move.b (a2)+,24*5(a0)
  4881.  move.b (a2)+,24*6(a0)
  4882.  move.b (a2)+,24*7(a0)
  4883.  subq #1,a0
  4884.  swap d0
  4885.  ext.l d0
  4886.  dbra d2,digitlop
  4887.  
  4888.  move.l #TimerScr+10+24*10,a0
  4889.  move.l NumTimes,d0
  4890.  move.l #digits,a1
  4891.  move.w #3,d2
  4892. digitlop2
  4893.  divs #10,d0
  4894.  swap d0
  4895.  lea (a1,d0.w*8),a2
  4896.  move.b (a2)+,(a0)
  4897.  move.b (a2)+,24(a0)
  4898.  move.b (a2)+,24*2(a0)
  4899.  move.b (a2)+,24*3(a0)
  4900.  move.b (a2)+,24*4(a0)
  4901.  move.b (a2)+,24*5(a0)
  4902.  move.b (a2)+,24*6(a0)
  4903.  move.b (a2)+,24*7(a0)
  4904.  subq #1,a0
  4905.  swap d0
  4906.  ext.l d0
  4907.  dbra d2,digitlop2
  4908.  
  4909.  move.l #TimerScr+10+24*20,a0
  4910.  moveq #0,d0
  4911.  move.w FramesToDraw,d0
  4912.  move.l #digits,a1
  4913.  move.w #2,d2
  4914. digitlop3
  4915.  divs #10,d0
  4916.  swap d0
  4917.  lea (a1,d0.w*8),a2
  4918.  move.b (a2)+,(a0)
  4919.  move.b (a2)+,24(a0)
  4920.  move.b (a2)+,24*2(a0)
  4921.  move.b (a2)+,24*3(a0)
  4922.  move.b (a2)+,24*4(a0)
  4923.  move.b (a2)+,24*5(a0)
  4924.  move.b (a2)+,24*6(a0)
  4925.  move.b (a2)+,24*7(a0)
  4926.  subq #1,a0
  4927.  swap d0
  4928.  ext.l d0
  4929.  dbra d2,digitlop3
  4930.  
  4931. dontshowtime:
  4932.  
  4933.  move.w Robotanimpos,d0
  4934.  add.w #6*38,d0
  4935.  cmp.w #6*38*64,d0
  4936.  blt.s norebot
  4937.  move.w #0,d0
  4938. norebot:
  4939.  move.w d0,Robotanimpos
  4940.  
  4941.  tst.w d0
  4942.  seq d1
  4943.  cmp.w #6*32*38,d0
  4944.  seq d2
  4945.  or.b d2,d1
  4946.  or.b d1,clump
  4947.  
  4948.  move.w Robotarmpos,d0
  4949.  add.w #6*14,d0
  4950.  cmp.w #6*14*64,d0
  4951.  blt.s norebot2
  4952.  move.w #0,d0
  4953. norebot2:
  4954.  move.w d0,Robotarmpos
  4955.  
  4956.  move.l alanptr,a0
  4957.  move.l (a0)+,alframe
  4958.  cmp.l #endalan,a0
  4959.  blt.s nostartalan
  4960.  move.l #alan,a0
  4961. nostartalan:
  4962.  move.l a0,alanptr
  4963.  
  4964.  move.l #$dff000,a6
  4965.  
  4966.  cmp.b #'4',Prefsfile+1
  4967.  bne.s nomuckabout
  4968.  
  4969.  move.w #$0,d0 
  4970.  tst.b NoiseMade0LEFT
  4971.  beq.s noturnoff0
  4972.  move.w #1,d0
  4973. noturnoff0:
  4974.  tst.b NoiseMade0RIGHT
  4975.  beq.s noturnoff1
  4976.  or.w #2,d0
  4977. noturnoff1:
  4978.  tst.b NoiseMade1RIGHT
  4979.  beq.s noturnoff2
  4980.  or.w #4,d0
  4981. noturnoff2:
  4982.  tst.b NoiseMade1LEFT
  4983.  beq.s noturnoff3
  4984.  or.w #8,d0
  4985. noturnoff3:
  4986.  move.w d0,dmacon(a6)
  4987.  
  4988. nomuckabout:
  4989.  
  4990.  tst.b PLR1MOUSE
  4991.  beq.s PLR1_nomouse
  4992.  bsr PLR1_mouse_control
  4993. PLR1_nomouse:
  4994.  tst.b PLR1KEYS
  4995.  beq.s PLR1_nokeys
  4996.  bsr PLR1_keyboard_control
  4997. PLR1_nokeys:
  4998. ; tst.b PLR1PATH
  4999. ; beq.s PLR1_nopath
  5000. ; bsr PLR1_follow_path
  5001. ;PLR1_nopath:
  5002.  tst.b PLR1JOY
  5003.  beq.s PLR1_nojoy
  5004.  bsr PLR1_JoyStick_control
  5005. PLR1_nojoy: 
  5006.  
  5007. ; tst.b PLR2_fire
  5008. ; beq.s firenotpressed2
  5009. ; fire was pressed last time.
  5010. ; btst #7,$bfe001
  5011. ; bne.s firenownotpressed2
  5012. ; fire is still pressed this time.
  5013. ; st PLR2_fire
  5014. ; bra dointer
  5015.  
  5016. firenownotpressed2:
  5017. ; fire has been released.
  5018. ; clr.b PLR2_fire
  5019. ; bra dointer
  5020.  
  5021. firenotpressed2
  5022.  
  5023. ; fire was not pressed last frame...
  5024.  
  5025. ; btst #7,$bfe001
  5026. ; if it has still not been pressed, go back above
  5027. ; bne.s firenownotpressed2
  5028. ; fire was not pressed last time, and was this time, so has
  5029. ; been clicked.
  5030. ; st PLR2_clicked
  5031. ; st PLR2_fire
  5032.  
  5033. dointer
  5034.  
  5035.  cmp.b #'4',Prefsfile+1
  5036.  beq fourchannel
  5037.  
  5038.  btst #1,$dff000+intreqr
  5039.  bne.s newsampbitl
  5040.  
  5041.  movem.l (a7)+,d0-d7/a0-a6
  5042.  tst.b counting
  5043.  beq .nostartcounter
  5044.  JSR STARTCOUNT
  5045. .nostartcounter:
  5046. noneed:
  5047.  
  5048.  rte
  5049.  
  5050.  
  5051. swappedem: dc.w 0
  5052.  
  5053. newsampbitl:
  5054.  
  5055.  move.w #$820f,$dff000+dmacon
  5056.  
  5057.  move.w #$200,$dff000+intreq
  5058.  
  5059. ; tst.b CHANNELDATA
  5060. ; bne nochannel0
  5061.  
  5062.  move.l pos0LEFT,a0
  5063.  move.l pos2LEFT,a1
  5064.  
  5065.  move.l #tab,a2
  5066.  
  5067.  moveq #0,d0
  5068.  moveq #0,d1
  5069.  move.b vol0left,d0
  5070.  move.b vol2left,d1
  5071.  cmp.b d1,d0
  5072.  slt swappedem
  5073.  bge.s fbig0
  5074.  
  5075. ; d1 is bigger so scale d0 and use d1
  5076. ; as audiochannel volume.
  5077.  
  5078.  exg a0,a1
  5079.  asl.w #6,d0
  5080.  divs d1,d0
  5081.  lsl.w #8,d0
  5082.  adda.w d0,a2
  5083.  move.w d1,$dff0a8
  5084.  bra.s donechan0
  5085.  
  5086. fbig0:
  5087.  tst.w d0
  5088.  beq.s donechan0
  5089.  asl.w #6,d1
  5090.  divs d0,d1
  5091.  lsl.w #8,d1
  5092.  adda.w d1,a2
  5093.  move.w d0,$dff0a8
  5094.  
  5095. donechan0:
  5096.  
  5097.  move.l Aupt0,a3
  5098.  move.l a3,$dff0a0
  5099.  move.l Auback0,Aupt0
  5100.  move.l a3,Auback0
  5101.  
  5102.  move.l Auback0,a3
  5103.  
  5104.  moveq #0,d0
  5105.  moveq #0,d1
  5106.  moveq #0,d2
  5107.  moveq #0,d3
  5108.  moveq #0,d4
  5109.  moveq #0,d5
  5110.  move.w #49,d7
  5111. loop:
  5112.  move.l (a0)+,d0
  5113.  move.b (a1)+,d1
  5114.  move.b (a1)+,d2
  5115.  move.b (a1)+,d3
  5116.  move.b (a1)+,d4
  5117.  move.b (a2,d3.w),d5
  5118.  swap d5
  5119.  move.b (a2,d1.w),d5
  5120.  asl.l #8,d5
  5121.  move.b (a2,d2.w),d5
  5122.  swap d5
  5123.  move.b (a2,d4.w),d5
  5124.  add.l d5,d0
  5125.  move.l d0,(a3)+
  5126.  dbra d7,loop
  5127.  
  5128.  tst.b swappedem
  5129.  beq.s .ok23
  5130.  exg a0,a1
  5131. .ok23:
  5132.  
  5133.  cmp.l Samp0endLEFT,a0
  5134.  blt.s .notoffendsamp1
  5135.  move.l #bass,a0
  5136.  move.l #bassend,Samp0endLEFT
  5137.  move.b #63,vol0left
  5138.  st LEFTCHANDATA+1
  5139.  move.w #0,LEFTCHANDATA+2
  5140. .notoffendsamp1:
  5141.  
  5142.  cmp.l Samp2endLEFT,a1
  5143.  blt.s .notoffendsamp2
  5144.  move.l #empty,a1
  5145.  move.l #emptyend,Samp2endLEFT
  5146.  move.b #0,vol2left
  5147.  st LEFTCHANDATA+1+8
  5148.  move.w #0,LEFTCHANDATA+2+8
  5149. .notoffendsamp2:
  5150.  
  5151.  move.l a0,pos0LEFT
  5152.  move.l a1,pos2LEFT
  5153.  
  5154. nochannel0:
  5155.  
  5156.  tst.b CHANNELDATA+16
  5157.  bne nochannel1
  5158.  
  5159.  
  5160.  move.l pos0RIGHT,a0
  5161.  move.l pos2RIGHT,a1
  5162.  
  5163.  move.l Aupt1,a3
  5164.  move.l a3,$dff0b0
  5165.  move.l Auback1,Aupt1
  5166.  move.l a3,Auback1
  5167.  
  5168.  move.l #tab,a2
  5169.  
  5170.  moveq #0,d0
  5171.  moveq #0,d1
  5172.  move.b vol0right,d0
  5173.  move.b vol2right,d1
  5174.  cmp.b d1,d0
  5175.  slt swappedem
  5176.  bge.s fbig1
  5177.  
  5178. ; d1 is bigger so scale d0 and use d1
  5179. ; as audiochannel volume.
  5180.  
  5181.  exg a0,a1
  5182.  asl.w #6,d0
  5183.  divs d1,d0
  5184.  lsl.w #8,d0
  5185.  adda.w d0,a2
  5186.  move.w d1,$dff0b8
  5187.  bra.s donechan1
  5188.  
  5189. fbig1:
  5190.  tst.w d0
  5191.  beq.s donechan1
  5192.  asl.w #6,d1
  5193.  divs d0,d1
  5194.  lsl.w #8,d1
  5195.  adda.w d1,a2
  5196.  move.w d0,$dff0b8
  5197.  
  5198. donechan1:
  5199.  moveq #0,d0
  5200.  moveq #0,d1
  5201.  moveq #0,d2
  5202.  moveq #0,d3
  5203.  moveq #0,d4
  5204.  moveq #0,d5
  5205.  move.w #49,d7
  5206. loop2:
  5207.  move.l (a0)+,d0
  5208.  move.b (a1)+,d1
  5209.  move.b (a1)+,d2
  5210.  move.b (a1)+,d3
  5211.  move.b (a1)+,d4
  5212.  move.b (a2,d3.w),d5
  5213.  swap d5
  5214.  move.b (a2,d1.w),d5
  5215.  asl.l #8,d5
  5216.  move.b (a2,d2.w),d5
  5217.  swap d5
  5218.  move.b (a2,d4.w),d5
  5219.  add.l d5,d0
  5220.  move.l d0,(a3)+
  5221.  dbra d7,loop2
  5222.  
  5223.  tst.b swappedem
  5224.  beq.s ok01
  5225.  exg a0,a1
  5226. ok01:
  5227.  
  5228.  cmp.l Samp0endRIGHT,a0
  5229.  blt.s .notoffendsamp1
  5230.  move.l #empty,a0
  5231.  move.l #emptyend,Samp0endRIGHT
  5232.  move.b #0,vol0right
  5233.  st RIGHTCHANDATA+1
  5234.  move.w #0,RIGHTCHANDATA+2
  5235. .notoffendsamp1:
  5236.  
  5237.  cmp.l Samp2endRIGHT,a1
  5238.  blt.s .notoffendsamp2
  5239.  move.l #empty,a1
  5240.  move.l #emptyend,Samp2endRIGHT
  5241.  move.b #0,vol2right
  5242.  st RIGHTCHANDATA+1+8
  5243.  move.w #0,RIGHTCHANDATA+2+8
  5244. .notoffendsamp2:
  5245.  
  5246.  move.l a0,pos0RIGHT
  5247.  move.l a1,pos2RIGHT
  5248.  
  5249. nochannel1:
  5250.  
  5251. ******************* Other two channels
  5252.  
  5253.  move.l pos1LEFT,a0
  5254.  move.l pos3LEFT,a1
  5255.  
  5256.  move.l #tab,a2
  5257.  
  5258.  moveq #0,d0
  5259.  moveq #0,d1
  5260.  move.b vol1left,d0
  5261.  move.b vol3left,d1
  5262.  cmp.b d1,d0
  5263.  slt swappedem
  5264.  bge.s fbig2
  5265.  
  5266. ; d1 is bigger so scale d0 and use d1
  5267. ; as audiochannel volume.
  5268.  
  5269.  exg a0,a1
  5270.  asl.w #6,d0
  5271.  divs d1,d0
  5272.  lsl.w #8,d0
  5273.  adda.w d0,a2
  5274.  move.w d1,$dff0d8
  5275.  bra.s donechan2
  5276.  
  5277. fbig2:
  5278.  tst.w d0
  5279.  beq.s donechan2
  5280.  asl.w #6,d1
  5281.  divs d0,d1
  5282.  lsl.w #8,d1
  5283.  adda.w d1,a2
  5284.  move.w d0,$dff0d8
  5285.  
  5286. donechan2:
  5287.  
  5288.  move.l Aupt2,a3
  5289.  move.l a3,$dff0d0
  5290.  move.l Auback2,Aupt2
  5291.  move.l a3,Auback2
  5292.  
  5293.  moveq #0,d0
  5294.  moveq #0,d1
  5295.  moveq #0,d2
  5296.  moveq #0,d3
  5297.  moveq #0,d4
  5298.  moveq #0,d5
  5299.  move.w #49,d7
  5300. loop3:
  5301.  move.l (a0)+,d0
  5302.  move.b (a1)+,d1
  5303.  move.b (a1)+,d2
  5304.  move.b (a1)+,d3
  5305.  move.b (a1)+,d4
  5306.  move.b (a2,d3.w),d5
  5307.  swap d5
  5308.  move.b (a2,d1.w),d5
  5309.  asl.l #8,d5
  5310.  move.b (a2,d2.w),d5
  5311.  swap d5
  5312.  move.b (a2,d4.w),d5
  5313.  add.l d5,d0
  5314.  move.l d0,(a3)+
  5315.  dbra d7,loop3
  5316.  
  5317.  tst.b swappedem
  5318.  beq.s .ok23
  5319.  exg a0,a1
  5320. .ok23:
  5321.  
  5322.  cmp.l Samp1endLEFT,a0
  5323.  blt.s .notoffendsamp3
  5324.  move.l #empty,a0
  5325.  move.l #emptyend,Samp1endLEFT
  5326.  move.b #0,vol1left
  5327.  st LEFTCHANDATA+1+4
  5328.  move.w #0,LEFTCHANDATA+2+4
  5329. .notoffendsamp3:
  5330.  
  5331.  cmp.l Samp3endLEFT,a1
  5332.  blt.s .notoffendsamp4
  5333.  move.l #empty,a1
  5334.  move.l #emptyend,Samp3endLEFT
  5335.  move.b #0,vol3left
  5336.  st LEFTCHANDATA+1+12
  5337.  move.w #0,LEFTCHANDATA+2+12
  5338. .notoffendsamp4:
  5339.  
  5340.  move.l a0,pos1LEFT
  5341.  move.l a1,pos3LEFT
  5342.  
  5343.  move.l pos1RIGHT,a0
  5344.  move.l pos3RIGHT,a1
  5345.  
  5346.  move.l Aupt3,a3
  5347.  move.l a3,$dff0c0
  5348.  move.l Auback3,Aupt3
  5349.  move.l a3,Auback3
  5350.  
  5351.  move.l #tab,a2
  5352.  
  5353.  moveq #0,d0
  5354.  moveq #0,d1
  5355.  move.b vol1right,d0
  5356.  move.b vol3right,d1
  5357.  cmp.b d1,d0
  5358.  slt.s swappedem
  5359.  bge.s fbig3
  5360.  
  5361.  exg a0,a1
  5362.  asl.w #6,d0
  5363.  divs d1,d0
  5364.  lsl.w #8,d0
  5365.  adda.w d0,a2
  5366.  move.w d1,$dff0c8
  5367.  bra.s donechan3
  5368.  
  5369. fbig3:
  5370.  tst.w d0
  5371.  beq.s donechan3
  5372.  asl.w #6,d1
  5373.  divs d0,d1
  5374.  lsl.w #8,d1
  5375.  adda.w d1,a2
  5376.  move.w d0,$dff0c8
  5377. donechan3:
  5378.  
  5379.  moveq #0,d0
  5380.  moveq #0,d1
  5381.  moveq #0,d2
  5382.  moveq #0,d3
  5383.  moveq #0,d4
  5384.  moveq #0,d5
  5385.  move.w #49,d7
  5386. loop4:
  5387.  move.l (a0)+,d0
  5388.  move.b (a1)+,d1
  5389.  move.b (a1)+,d2
  5390.  move.b (a1)+,d3
  5391.  move.b (a1)+,d4
  5392.  move.b (a2,d3.w),d5
  5393.  swap d5
  5394.  move.b (a2,d1.w),d5
  5395.  asl.l #8,d5
  5396.  move.b (a2,d2.w),d5
  5397.  swap d5
  5398.  move.b (a2,d4.w),d5
  5399.  add.l d5,d0
  5400.  move.l d0,(a3)+
  5401.  dbra d7,loop4
  5402.  
  5403.  tst.b swappedem
  5404.  beq.s .ok23
  5405.  exg a0,a1
  5406. .ok23:
  5407.  
  5408.  cmp.l Samp1endRIGHT,a0
  5409.  blt.s notoffendsamp3
  5410.  move.l #empty,a0
  5411.  move.l #emptyend,Samp1endRIGHT
  5412.  move.b #0,vol1right
  5413.  st RIGHTCHANDATA+1+4
  5414.  move.w #0,RIGHTCHANDATA+2+4
  5415. notoffendsamp3:
  5416.  
  5417.  cmp.l Samp3endRIGHT,a1
  5418.  blt.s notoffendsamp4
  5419.  move.l #empty,a1
  5420.  move.l #emptyend,Samp3endRIGHT
  5421.  move.b #0,vol3right
  5422.  st RIGHTCHANDATA+1+12
  5423.  move.w #0,RIGHTCHANDATA+2+12
  5424. notoffendsamp4:
  5425.  
  5426.  move.l a0,pos1RIGHT
  5427.  move.l a1,pos3RIGHT
  5428.  
  5429.  movem.l (a7)+,d0-d7/a0-a6
  5430.  tst.b counting
  5431.  beq .nostartcounter
  5432.  JSR STARTCOUNT
  5433. .nostartcounter:
  5434.  
  5435.  rte
  5436.  
  5437. ***********************************
  5438. * 4 channel sound routine
  5439. ***********************************
  5440.  
  5441. fourchannel:
  5442.  
  5443.  move.l #$dff000,a6
  5444.  
  5445.  btst #7,intreqrl(a6)
  5446.  beq.s nofinish0
  5447.  move.w #0,LEFTCHANDATA+2
  5448.  st LEFTCHANDATA+1
  5449.  move.l #bass,$a0(a6)
  5450.  move.w #18370/2,$a4(a6) 
  5451.  move.w #$0080,intreq(a6)
  5452. nofinish0:
  5453.  
  5454.  tst.b NoiseMade0pLEFT
  5455.  beq.s NoChan0sound
  5456.  
  5457.  move.l Samp0endLEFT,d0
  5458.  move.l pos0LEFT,d1
  5459.  sub.l d1,d0
  5460.  asr.w #1,d0
  5461.  move.w d0,$a4(a6)
  5462.  move.l d1,$a0(a6)
  5463.  move.w #$8201,dmacon(a6)
  5464.  moveq #0,d0
  5465.  move.b vol0left,d0
  5466.  move.w d0,$a8(a6)
  5467.  
  5468. NoChan0sound:
  5469.  
  5470.  btst #0,intreqr(a6)
  5471.  beq.s nofinish1
  5472.  move.w #0,RIGHTCHANDATA+2
  5473.  st RIGHTCHANDATA+1
  5474.  move.l #null,$b0(a6)
  5475.  move.w #100,$b4(a6)
  5476.  move.w #$0100,intreq(a6)
  5477. nofinish1:
  5478.  
  5479.  tst.b NoiseMade0pRIGHT
  5480.  beq.s NoChan1sound
  5481.  
  5482.  move.l Samp0endRIGHT,d0
  5483.  move.l pos0RIGHT,d1
  5484.  sub.l d1,d0
  5485.  asr.w #1,d0
  5486.  move.w d0,$b4(a6)
  5487.  move.l d1,$b0(a6)
  5488.  move.w #$8202,dmacon(a6)
  5489.  moveq #0,d0
  5490.  move.b vol0right,d0
  5491.  move.w d0,$b8(a6)
  5492.  
  5493. NoChan1sound:
  5494.  
  5495.  
  5496.  btst #1,intreqr(a6)
  5497.  beq.s nofinish2
  5498.  move.w #0,RIGHTCHANDATA+2+4
  5499.  st RIGHTCHANDATA+1+4
  5500.  move.l #null,$c0(a6)
  5501.  move.w #100,$c4(a6)
  5502.  move.w #$0200,intreq(a6)
  5503. nofinish2:
  5504.  
  5505.  tst.b NoiseMade1pRIGHT
  5506.  beq.s NoChan2sound
  5507.  
  5508.  move.l Samp1endRIGHT,d0
  5509.  move.l pos1RIGHT,d1
  5510.  sub.l d1,d0
  5511.  asr.w #1,d0
  5512.  move.w d0,$c4(a6)
  5513.  move.l d1,$c0(a6)
  5514.  move.w #$8204,dmacon(a6)
  5515.  moveq #0,d0
  5516.  move.b vol1right,d0
  5517.  move.w d0,$c8(a6)
  5518.  
  5519. NoChan2sound:
  5520.  
  5521.  btst #2,intreqr(a6)
  5522.  beq.s nofinish3
  5523.  move.w #0,LEFTCHANDATA+2+4
  5524.  st LEFTCHANDATA+1+4
  5525.  move.l #null,$d0(a6)
  5526.  move.w #100,$d4(a6)
  5527.  move.w #$0400,intreq(a6)
  5528. nofinish3:
  5529.  
  5530.  tst.b NoiseMade1pLEFT
  5531.  beq.s NoChan3sound
  5532.  
  5533.  move.l Samp1endLEFT,d0
  5534.  move.l pos1LEFT,d1
  5535.  sub.l d1,d0
  5536.  asr.w #1,d0
  5537.  move.w d0,$d4(a6)
  5538.  move.l d1,$d0(a6)
  5539.  move.w #$8208,dmacon(a6)
  5540.  moveq #0,d0
  5541.  move.b vol1left,d0
  5542.  move.w d0,$d8(a6)
  5543.  
  5544. NoChan3sound:
  5545.  
  5546. nomorechannels:
  5547.  
  5548.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  5549.  move.l #0,NoiseMade0LEFT
  5550.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  5551.  move.l #0,NoiseMade0RIGHT
  5552.  
  5553.  movem.l (a7)+,d0-d7/a0-a6
  5554.  tst.b counting
  5555.  beq .nostartcounter
  5556.  JSR STARTCOUNT
  5557. .nostartcounter:
  5558.  
  5559.  rte
  5560.  
  5561. backbeat: dc.w 0
  5562.  
  5563. Samp0endRIGHT: dc.l emptyend
  5564. Samp1endRIGHT: dc.l emptyend
  5565. Samp2endRIGHT: dc.l emptyend
  5566. Samp3endRIGHT: dc.l emptyend
  5567. Samp0endLEFT: dc.l emptyend
  5568. Samp1endLEFT: dc.l emptyend
  5569. Samp2endLEFT: dc.l emptyend
  5570. Samp3endLEFT: dc.l emptyend
  5571.  
  5572. Aupt0: dc.l null
  5573. Auback0: dc.l null+500
  5574. Aupt2: dc.l null3
  5575. Auback2: dc.l null3+500
  5576. Aupt3: dc.l null4
  5577. Auback3: dc.l null4+500
  5578. Aupt1: dc.l null2
  5579. Auback1: dc.l null2+500
  5580.  
  5581. NoiseMade0LEFT: dc.b 0
  5582. NoiseMade1LEFT: dc.b 0
  5583. NoiseMade2LEFT: dc.b 0
  5584. NoiseMade3LEFT: dc.b 0
  5585. NoiseMade0pLEFT: dc.b 0
  5586. NoiseMade1pLEFT: dc.b 0
  5587. NoiseMade2pLEFT: dc.b 0
  5588. NoiseMade3pLEFT: dc.b 0
  5589. NoiseMade0RIGHT: dc.b 0
  5590. NoiseMade1RIGHT: dc.b 0
  5591. NoiseMade2RIGHT: dc.b 0
  5592. NoiseMade3RIGHT: dc.b 0
  5593. NoiseMade0pRIGHT: dc.b 0
  5594. NoiseMade1pRIGHT: dc.b 0
  5595. NoiseMade2pRIGHT: dc.b 0
  5596. NoiseMade3pRIGHT: dc.b 0
  5597.  
  5598. empty: ds.l 100
  5599. emptyend:
  5600.  
  5601. **************************************
  5602. * I want a routine to calculate all the
  5603. * info needed for the sound player to
  5604. * work, given say position of noise, volume
  5605. * and sample number.
  5606.  
  5607. Samplenum: dc.w 0
  5608. Noisex: dc.w 0
  5609. Noisez: dc.w 0
  5610. Noisevol: dc.w 0
  5611. chanpick: dc.w 0
  5612. IDNUM: dc.w 0
  5613. needleft: dc.b 0
  5614. needright: dc.b 0
  5615. STEREO: dc.b $0
  5616. even
  5617. prot6: dc.w 0
  5618.  
  5619.  even
  5620.  
  5621. CHANNELDATA:
  5622. LEFTCHANDATA:
  5623.  dc.l $FF000000
  5624.  dc.l $00000000
  5625.  dc.l $00000000
  5626.  dc.l $00000000
  5627. RIGHTCHANDATA:
  5628.  dc.l $00000000
  5629.  dc.l $00000000
  5630.  dc.l $00000000
  5631.  dc.l $00000000
  5632.  
  5633. RIGHTPLAYEDTAB: ds.l 20
  5634. LEFTPLAYEDTAB: ds.l 20
  5635.  
  5636. MakeSomeNoise:
  5637.  
  5638. ; Plan for new sound handler:
  5639. ; It is sent a sample number,
  5640. ; a position relative to the
  5641. ; player, an id number and a volume.
  5642. ; Also notifplaying.
  5643.  
  5644. ; indirect inputs are the available
  5645. ; channel flags and whether or not
  5646. ; stereo sound is selected.
  5647.  
  5648. ; the algorithm must decide
  5649. ; whether the new sound is more
  5650. ; important than the ones already
  5651. ; playing. Thus an 'importance'
  5652. ; must be calculated, probably
  5653. ; using volume.
  5654.  
  5655. ; The output needs to be:
  5656.  
  5657. ; Write the pointers and volumes of
  5658. ; the sound channels
  5659.  
  5660.  
  5661.  tst.b notifplaying
  5662.  beq.s dontworry
  5663.  
  5664. ; find if we are already playing
  5665.  
  5666.  move.b IDNUM,d0
  5667.  move.w #7,d1
  5668.  lea CHANNELDATA,a3
  5669. findsameasme
  5670.  tst.b (a3)
  5671.  bne.s notavail
  5672.  cmp.b 1(a3),d0
  5673.  beq SameAsMe
  5674. notavail:
  5675.  add.w #4,a3
  5676.  dbra d1,findsameasme
  5677.  bra dontworry
  5678. SameAsMe
  5679.  rts
  5680.  
  5681. dontworry:
  5682.  
  5683. ; Ok its fine for us to play a sound.
  5684. ; So calculate left/right volume.
  5685.  
  5686.  move.w Noisex,d1
  5687.  muls d1,d1
  5688.  move.w Noisez,d2
  5689.  muls d2,d2
  5690.  move.w #64,d3
  5691.  moveq #1,d0
  5692.  add.l d1,d2
  5693.  beq pastcalc
  5694.  
  5695.  move.w #31,d0
  5696. .findhigh
  5697.  btst d0,d2
  5698.  bne .foundhigh
  5699.  dbra d0,.findhigh
  5700. .foundhigh
  5701.  asr.w #1,d0
  5702.  clr.l d3
  5703.  bset d0,d3
  5704.  move.l d3,d0
  5705.  
  5706.  move.w d0,d3
  5707.  muls d3,d3    ; x*x
  5708.  sub.l d2,d3    ; x*x-a
  5709.  asr.l #1,d3    ; (x*x-a)/2
  5710.  divs d0,d3    ; (x*x-a)/2x
  5711.  sub.w d3,d0    ; second approx
  5712.  bgt .stillnot0
  5713.  move.w #1,d0
  5714. .stillnot0
  5715.  
  5716.  move.w d0,d3
  5717.  muls d3,d3
  5718.  sub.l d2,d3
  5719.  asr.l #1,d3
  5720.  divs d0,d3
  5721.  sub.w d3,d0    ; second approx
  5722.  bgt .stillnot02
  5723.  move.w #1,d0
  5724. .stillnot02
  5725.  
  5726.  move.w #64,d3
  5727.  muls Noisevol,d3
  5728.  asr.w #1,d0
  5729.  addq #1,d0
  5730.  divs d0,d3
  5731.  
  5732.  cmp.w #64,d3
  5733.  ble.s notooloud
  5734.  move.w #64,d3
  5735. notooloud:
  5736.  
  5737. pastcalc:
  5738.  
  5739.     ; d3 contains volume of noise.
  5740.     
  5741.  move.w d3,d4
  5742.  
  5743.  move.w d3,d2
  5744.  muls Noisex,d2
  5745.  add.w d0,d0
  5746.  divs d0,d2
  5747.  
  5748.  bgt.s quietleft
  5749.  add.w d2,d4
  5750.  bge.s donequiet
  5751.  move.w #0,d4
  5752.  bra.s donequiet
  5753. quietleft:
  5754.  sub.w d2,d3
  5755.  bge.s donequiet
  5756.  move.w #0,d3
  5757. donequiet:
  5758.  
  5759. ; d3=leftvol?
  5760. ; d4=rightvol?
  5761.  
  5762.  clr.w needleft
  5763.  
  5764.  cmp.b d3,d4
  5765.  bgt.s RightLouder
  5766.  
  5767. ; Left is louder; is it MUCH louder?
  5768.  
  5769.  st needleft
  5770.  move.w d3,d2
  5771.  sub.w d4,d2
  5772.  cmp.w #32,d2
  5773.  slt needright
  5774.  bra aboutsame
  5775.  
  5776. RightLouder:
  5777.  st needright
  5778.  move.w d4,d2
  5779.  sub.w d3,d2
  5780.  cmp.w #32,d2
  5781.  slt needleft
  5782.  
  5783. aboutsame:
  5784.  
  5785.  tst.b STEREO
  5786.  beq NOSTEREO
  5787.  
  5788. ; Find least important sound on left
  5789.  
  5790.  move.l #0,a2
  5791.  move.l #0,d5
  5792.  move.w #10000,d2
  5793.  move.b IDNUM,d0
  5794.  lea LEFTCHANDATA,a3
  5795.  move.w #3,d1
  5796. FindLeftChannel
  5797.  tst.b (a3)
  5798.  bne.s .notactive
  5799.  cmp.b 1(a3),d0
  5800.  beq.s FOUNDLEFT
  5801.  cmp.w 2(a3),d2
  5802.  blt.s .notactive
  5803.  move.w 2(a3),d2
  5804.  move.l a3,a2
  5805.  move.w d5,d6
  5806.  
  5807. .notactive:
  5808.  add.w #4,a3
  5809.  add.w #1,d5
  5810.  dbra d1,FindLeftChannel
  5811.  move.l a2,a3
  5812.  bra.s gopastleft
  5813. FOUNDLEFT:
  5814.  move.w d5,d6
  5815. gopastleft:
  5816.  tst.l a3
  5817.  bne.s FOUNDALEFT
  5818.  rts
  5819. FOUNDALEFT:
  5820.  
  5821. ; d6 = channel number
  5822.  move.b d0,1(a3)
  5823.  move.w d3,2(a3)
  5824.  
  5825.  move.w Samplenum,d5
  5826.  move.l #SampleList,a3
  5827.  move.l (a3,d5.w*8),a1
  5828.  move.l 4(a3,d5.w*8),a2
  5829.  
  5830.  tst.b d6
  5831.  seq NoiseMade0LEFT
  5832.  beq.s .chan0
  5833.  cmp.b #2,d6
  5834.  slt NoiseMade1LEFT
  5835.  blt .chan1
  5836.  seq NoiseMade2LEFT
  5837.  beq .chan2
  5838.  st NoiseMade3LEFT
  5839.  
  5840.  move.b d5,LEFTPLAYEDTAB+9
  5841.  move.b d3,LEFTPLAYEDTAB+1+9
  5842.  move.b d4,LEFTPLAYEDTAB+2+9
  5843.  move.b d3,vol3left
  5844.  move.l a1,pos3LEFT
  5845.  move.l a2,Samp3endLEFT
  5846.  bra dorightchan
  5847.  
  5848. .chan0: 
  5849.  move.b d5,LEFTPLAYEDTAB
  5850.  move.b d3,LEFTPLAYEDTAB+1
  5851.  move.b d4,LEFTPLAYEDTAB+2
  5852.  move.l a1,pos0LEFT
  5853.  move.l a2,Samp0endLEFT
  5854.  move.b d3,vol0left
  5855.  bra dorightchan
  5856.  
  5857. .chan1:
  5858.  move.b d5,LEFTPLAYEDTAB+3
  5859.  move.b d3,LEFTPLAYEDTAB+1+3
  5860.  move.b d4,LEFTPLAYEDTAB+2+3
  5861.  move.b d3,vol1left
  5862.  move.l a1,pos1LEFT
  5863.  move.l a2,Samp1endLEFT
  5864.  bra dorightchan
  5865.  
  5866. .chan2: 
  5867.  move.b d5,LEFTPLAYEDTAB+6
  5868.  move.b d3,LEFTPLAYEDTAB+1+6
  5869.  move.b d4,LEFTPLAYEDTAB+2+6
  5870.  move.l a1,pos2LEFT
  5871.  move.l a2,Samp2endLEFT
  5872.  move.b d3,vol2left
  5873.  
  5874. dorightchan:
  5875.  
  5876. ; Find least important sound on right
  5877.  
  5878.  move.l #0,a2
  5879.  move.l #0,d5
  5880.  move.w #10000,d2
  5881.  move.b IDNUM,d0
  5882.  lea RIGHTCHANDATA,a3
  5883.  move.w #3,d1
  5884. FindRightChannel
  5885.  tst.b (a3)
  5886.  bne.s .notactive
  5887.  cmp.b 1(a3),d0
  5888.  beq.s FOUNDRIGHT
  5889.  cmp.w 2(a3),d2
  5890.  blt.s .notactive
  5891.  move.w 2(a3),d2
  5892.  move.l a3,a2
  5893.  move.w d5,d6
  5894.  
  5895. .notactive:
  5896.  add.w #4,a3
  5897.  add.w #1,d5
  5898.  dbra d1,FindRightChannel
  5899.  move.l a2,a3
  5900.  bra.s gopastright
  5901. FOUNDRIGHT:
  5902.  move.w d5,d6
  5903. gopastright:
  5904.  tst.l a3
  5905.  bne.s FOUNDARIGHT
  5906.  rts
  5907. FOUNDARIGHT:
  5908.  
  5909. ; d6 = channel number
  5910.  move.b d0,1(a3)
  5911.  move.w d3,2(a3)
  5912.  
  5913.  move.w Samplenum,d5
  5914.  move.l #SampleList,a3
  5915.  move.l (a3,d5.w*8),a1
  5916.  move.l 4(a3,d5.w*8),a2
  5917.  
  5918.  tst.b d6
  5919.  seq NoiseMade0RIGHT
  5920.  beq.s .chan0
  5921.  cmp.b #2,d6
  5922.  slt NoiseMade1RIGHT
  5923.  blt .chan1
  5924.  seq NoiseMade2RIGHT
  5925.  beq .chan2
  5926.  st NoiseMade3RIGHT
  5927.  
  5928.  move.b d5,RIGHTPLAYEDTAB+9
  5929.  move.b d3,RIGHTPLAYEDTAB+1+9
  5930.  move.b d4,RIGHTPLAYEDTAB+2+9
  5931.  move.b d4,vol3right
  5932.  move.l a1,pos3RIGHT
  5933.  move.l a2,Samp3endRIGHT
  5934.  rts
  5935.  
  5936. .chan0: 
  5937.  move.b d5,RIGHTPLAYEDTAB
  5938.  move.b d3,RIGHTPLAYEDTAB+1
  5939.  move.b d4,RIGHTPLAYEDTAB+2
  5940.  move.l a1,pos0RIGHT
  5941.  move.l a2,Samp0endRIGHT
  5942.  move.b d4,vol0right
  5943.  rts
  5944.  
  5945. .chan1:
  5946.  move.b d5,RIGHTPLAYEDTAB+3
  5947.  move.b d3,RIGHTPLAYEDTAB+1+3
  5948.  move.b d4,RIGHTPLAYEDTAB+2+3
  5949.  move.b d3,vol1right
  5950.  move.l a1,pos1RIGHT
  5951.  move.l a2,Samp1endRIGHT
  5952.  rts
  5953.  
  5954. .chan2: 
  5955.  move.b d5,RIGHTPLAYEDTAB+6
  5956.  move.b d3,RIGHTPLAYEDTAB+1+6
  5957.  move.b d4,RIGHTPLAYEDTAB+2+6
  5958.  move.l a1,pos2RIGHT
  5959.  move.l a2,Samp2endRIGHT
  5960.  move.b d3,vol2right
  5961.  rts
  5962.  
  5963. NOSTEREO:
  5964.  move.l #0,a2
  5965.  move.l #0,d5
  5966.  move.w #10000,d2
  5967.  move.b IDNUM,d0
  5968.  lea CHANNELDATA,a3
  5969.  move.w #7,d1
  5970. FindChannel
  5971.  tst.b (a3)
  5972.  bne.s .notactive
  5973.  cmp.b 1(a3),d0
  5974.  beq.s FOUNDCHAN
  5975.  cmp.w 2(a3),d2
  5976.  blt.s .notactive
  5977.  move.w 2(a3),d2
  5978.  move.l a3,a2
  5979.  move.w d5,d6
  5980.  
  5981. .notactive:
  5982.  add.w #4,a3
  5983.  add.w #1,d5
  5984.  dbra d1,FindChannel
  5985.  move.l a2,a3
  5986.  bra.s gopastchan
  5987. FOUNDCHAN:
  5988.  move.w d5,d6
  5989. gopastchan:
  5990.  tst.l a3
  5991.  bne.s FOUNDACHAN
  5992. tooquiet:
  5993.  rts
  5994. FOUNDACHAN:
  5995.  
  5996. ; d6 = channel number
  5997.  
  5998.  cmp.w d2,d3
  5999.  blt.s tooquiet
  6000.  
  6001.  move.b d0,1(a3)
  6002.  move.w d3,2(a3)
  6003.  
  6004.  move.w Samplenum,d5
  6005.  move.l #SampleList,a3
  6006.  move.l (a3,d5.w*8),a1
  6007.  move.l 4(a3,d5.w*8),a2
  6008.  
  6009.  tst.b d6
  6010.  seq NoiseMade0LEFT
  6011.  beq .chan0
  6012.  cmp.b #2,d6
  6013.  slt NoiseMade1LEFT
  6014.  blt .chan1
  6015.  seq NoiseMade2LEFT
  6016.  beq .chan2
  6017.  cmp.b #4,d6
  6018.  slt NoiseMade3LEFT
  6019.  blt .chan3
  6020.  seq NoiseMade0RIGHT
  6021.  beq .chan4
  6022.  cmp.b #6,d6
  6023.  slt NoiseMade1RIGHT
  6024.  blt .chan5
  6025.  seq NoiseMade2RIGHT
  6026.  beq .chan6
  6027.  st NoiseMade3RIGHT
  6028.  
  6029.  move.b d5,RIGHTPLAYEDTAB+9
  6030.  move.b d3,RIGHTPLAYEDTAB+1+9
  6031.  move.b d4,RIGHTPLAYEDTAB+2+9
  6032.  move.b d4,vol3right
  6033.  move.l a1,pos3RIGHT
  6034.  move.l a2,Samp3endRIGHT
  6035.  rts
  6036.  
  6037. .chan3:
  6038.  move.b d5,LEFTPLAYEDTAB+9
  6039.  move.b d3,LEFTPLAYEDTAB+1+9
  6040.  move.b d4,LEFTPLAYEDTAB+2+9
  6041.  move.b d3,vol3left
  6042.  move.l a1,pos3LEFT
  6043.  move.l a2,Samp3endLEFT
  6044.  bra dorightchan
  6045.  
  6046. .chan0: 
  6047.  move.b d5,LEFTPLAYEDTAB
  6048.  move.b d3,LEFTPLAYEDTAB+1
  6049.  move.b d4,LEFTPLAYEDTAB+2
  6050.  move.l a1,pos0LEFT
  6051.  move.l a2,Samp0endLEFT
  6052.  move.b d3,vol0left
  6053.  rts
  6054.  
  6055. .chan1:
  6056.  move.b d5,LEFTPLAYEDTAB+3
  6057.  move.b d3,LEFTPLAYEDTAB+1+3
  6058.  move.b d4,LEFTPLAYEDTAB+2+3
  6059.  move.b d3,vol1left
  6060.  move.l a1,pos1LEFT
  6061.  move.l a2,Samp1endLEFT
  6062.  rts
  6063.  
  6064. .chan2: 
  6065.  move.b d5,LEFTPLAYEDTAB+6
  6066.  move.b d3,LEFTPLAYEDTAB+1+6
  6067.  move.b d4,LEFTPLAYEDTAB+2+6
  6068.  move.l a1,pos2LEFT
  6069.  move.l a2,Samp2endLEFT
  6070.  move.b d3,vol2left
  6071.  rts
  6072.  
  6073. .chan4: 
  6074.  move.b d5,RIGHTPLAYEDTAB
  6075.  move.b d3,RIGHTPLAYEDTAB+1
  6076.  move.b d4,RIGHTPLAYEDTAB+2
  6077.  move.l a1,pos0RIGHT
  6078.  move.l a2,Samp0endRIGHT
  6079.  move.b d4,vol0right
  6080.  rts
  6081.  
  6082. .chan5:
  6083.  move.b d5,RIGHTPLAYEDTAB+3
  6084.  move.b d3,RIGHTPLAYEDTAB+1+3
  6085.  move.b d4,RIGHTPLAYEDTAB+2+3
  6086.  move.b d3,vol1right
  6087.  move.l a1,pos1RIGHT
  6088.  move.l a2,Samp1endRIGHT
  6089.  rts
  6090.  
  6091. .chan6: 
  6092.  move.b d5,RIGHTPLAYEDTAB+6
  6093.  move.b d3,RIGHTPLAYEDTAB+1+6
  6094.  move.b d4,RIGHTPLAYEDTAB+2+6
  6095.  move.l a1,pos2RIGHT
  6096.  move.l a2,Samp2endRIGHT
  6097.  move.b d3,vol2right
  6098.  rts
  6099.  
  6100. SampleList:
  6101.  dc.l Scream,EndScream
  6102.  dc.l Shoot,EndShoot
  6103.  dc.l Munch,EndMunch
  6104.  dc.l PooGun,EndPooGun
  6105.  dc.l Collect,EndCollect
  6106. ;5
  6107.  dc.l DoorNoise,EndDoorNoise
  6108.  dc.l 0,0
  6109.  dc.l Stomp,EndStomp
  6110.  dc.l LowScream,EndLowScream
  6111.  dc.l BaddieGun,EndBaddieGun
  6112. ;10
  6113.  dc.l SwitchNoise,EndSwitch
  6114.  dc.l Reload,EndReload
  6115.  dc.l NoAmmo,EndNoAmmo
  6116.  dc.l Splotch,EndSplotch
  6117.  dc.l SplatPop,EndSplatPop
  6118. ;15
  6119.  dc.l Boom,EndBoom
  6120.  dc.l Hiss,EndHiss
  6121.  dc.l Howl1,EndHowl1
  6122.  dc.l Howl2,EndHowl2
  6123.  dc.l Pant,EndPant
  6124. ;20
  6125.  dc.l Whoosh,EndWhoosh
  6126.  
  6127. saveinters:  
  6128.  dc.w 0
  6129.  
  6130. z: dc.w 10
  6131.  
  6132. notifplaying:
  6133.  dc.w 0
  6134.  
  6135. audpos1: dc.w 0
  6136. audpos1b: dc.w 0
  6137. audpos2: dc.w 0
  6138. audpos2b: dc.w 0
  6139. audpos3: dc.w 0
  6140. audpos3b: dc.w 0
  6141. audpos4: dc.w 0
  6142. audpos4b: dc.w 0
  6143.  
  6144. vol0left: dc.w 0
  6145. vol0right: dc.w 0
  6146. vol1left: dc.w 0
  6147. vol1right: dc.w 0
  6148. vol2left: dc.w 0
  6149. vol2right: dc.w 0
  6150. vol3left: dc.w 0
  6151. vol3right: dc.w 0
  6152.  
  6153. pos: dc.l 0
  6154.  
  6155. pos0LEFT: dc.l empty
  6156. pos1LEFT: dc.l empty
  6157. pos2LEFT: dc.l empty
  6158. pos3LEFT: dc.l empty
  6159. pos0RIGHT: dc.l empty
  6160. pos1RIGHT: dc.l empty
  6161. pos2RIGHT: dc.l empty
  6162. pos3RIGHT: dc.l empty
  6163.  
  6164. numtodo dc.w 0
  6165.  
  6166. npt: dc.w 0
  6167.  
  6168. pretab:
  6169. val SET 0
  6170.  REPT 128
  6171.  dc.b val
  6172. val SET val+1
  6173.  ENDR
  6174. val SET -128
  6175.  REPT 128
  6176.  dc.b val
  6177. val SET val+1
  6178.  ENDR 
  6179.  
  6180. tab:
  6181.  ds.b 256*65
  6182.  
  6183.  
  6184. test: dc.l 0
  6185.  ds.l 30
  6186.  
  6187.  even
  6188. ConstCols:
  6189.  incbin "ConstCols"
  6190.  even
  6191. Smoothscalecols:
  6192. ; incbin "smoothbumppalscaled"
  6193.  even
  6194. SmoothTile:
  6195. ; incbin "smoothbumptile"
  6196.  even
  6197. Bumpscalecols:
  6198. ; incbin "Bumppalscaled"
  6199.  even
  6200. Bumptile:
  6201. ; incbin "bumptile"
  6202.  even
  6203. scalecols: incbin "bytepixpalscaled"
  6204.  even
  6205. floorscalecols: incbin "floorpalscaled"
  6206.  even
  6207. PaletteAddr: dc.l 0
  6208. ChunkAddr: dc.l 0
  6209. walltiles:
  6210.  dc.l GreenMechanicWALL
  6211.  dc.l BlueGreyMetalWALL
  6212.  dc.l TechnoDetailWALL
  6213.  dc.l BlueStoneWALL
  6214.  dc.l RedAlertWALL
  6215.  dc.l RockWALL
  6216.  
  6217. GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  6218. BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  6219. TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  6220. BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  6221. RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  6222. RockWALL: incbin "ab3:includes/walls/rock.wad"
  6223.  
  6224. floortile:
  6225.  incbin "floortile" 
  6226.  even
  6227. wallrouts:
  6228. ; incbin "2x2WallDraw" 
  6229.  CNOP 0,64
  6230. BackPicture:
  6231.  incbin "backfile"
  6232. EndBackPicture:
  6233.  
  6234. drawpt: dc.l colbars2
  6235. olddrawpt: dc.l colbars
  6236. frompt: dc.l 0 
  6237.  
  6238. SineTable:
  6239.  incbin "bigsine"
  6240.  
  6241. angpos: dc.w 0
  6242. angspd: dc.w 0
  6243. flooryoff: dc.w 0
  6244. xoff: dc.l 0
  6245. yoff: dc.l 0
  6246. yvel: dc.l 0
  6247. zoff: dc.l 0
  6248. tyoff: dc.l 0
  6249. xspdval: dc.l 0
  6250. zspdval: dc.l 0
  6251. Zone: dc.w 0
  6252.  
  6253. PLR1: dc.b $ff
  6254.  even
  6255. PLR1_cosval: dc.w 0
  6256. PLR1_sinval: dc.w 0
  6257. PLR1_angpos: dc.w 0
  6258. PLR1_angspd: dc.w 0
  6259. PLR1_xoff: dc.l 0
  6260. PLR1_yoff: dc.l 0
  6261. PLR1_yvel: dc.l 0
  6262. PLR1_zoff: dc.l 0
  6263. PLR1_tyoff: dc.l 0
  6264. PLR1_xspdval: dc.l 0
  6265. PLR1_zspdval: dc.l 0
  6266. PLR1_Zone: dc.w 0
  6267. PLR1_Roompt: dc.l 0
  6268. PLR1_OldRoompt: dc.l 0
  6269. PLR1_PointsToRotatePtr: dc.l 0
  6270. PLR1_ListOfGraphRooms: dc.l 0
  6271. PLR1_oldxoff: dc.l 0
  6272. PLR1_oldzoff: dc.l 0
  6273. PLR1_StoodInTop: dc.b 0
  6274.  even
  6275. PLR1_height: dc.l 0
  6276.  
  6277.  ds.w 4
  6278.  
  6279. PLR1s_cosval: dc.w 0
  6280. PLR1s_sinval: dc.w 0
  6281. PLR1s_angpos: dc.w 0
  6282. PLR1s_angspd: dc.w 0
  6283. PLR1s_xoff: dc.l 0
  6284. PLR1s_yoff: dc.l 0
  6285. PLR1s_yvel: dc.l 0
  6286. PLR1s_zoff: dc.l 0
  6287. PLR1s_tyoff: dc.l 0
  6288. PLR1s_xspdval: dc.l 0
  6289. PLR1s_zspdval: dc.l 0
  6290. PLR1s_Zone: dc.w 0
  6291. PLR1s_Roompt: dc.l 0
  6292. PLR1s_OldRoompt: dc.l 0
  6293. PLR1s_PointsToRotatePtr: dc.l 0
  6294. PLR1s_ListOfGraphRooms: dc.l 0
  6295. PLR1s_oldxoff: dc.l 0
  6296. PLR1s_oldzoff: dc.l 0
  6297. PLR1s_height: dc.l 0
  6298. PLR1s_targheight: dc.l 0
  6299.  
  6300.  ds.w 4
  6301.  
  6302. PLR2: dc.b $0
  6303.  even
  6304. PLR2_cosval: dc.w 0
  6305. PLR2_sinval: dc.w 0
  6306. PLR2_angpos: dc.w 0
  6307. PLR2_angspd: dc.w 0
  6308. PLR2_xoff: dc.l 0
  6309. PLR2_yoff: dc.l 0
  6310. PLR2_yvel: dc.l 0
  6311. PLR2_zoff: dc.l 0
  6312. PLR2_tyoff: dc.l 0
  6313. PLR2_xspdval: dc.l 0
  6314. PLR2_zspdval: dc.l 0
  6315. PLR2_Zone: dc.w 0
  6316. PLR2_Roompt: dc.l 0
  6317. PLR2_OldRoompt: dc.l 0
  6318. PLR2_PointsToRotatePtr: dc.l 0
  6319. PLR2_ListOfGraphRooms: dc.l 0
  6320. PLR2_ForwardSpd: dc.w 0
  6321.  
  6322. liftanimtab:
  6323.  
  6324. endliftanimtab:
  6325.  
  6326. glassball:
  6327.  incbin "glassball.inc"
  6328. endglass
  6329. glassballpt: dc.l glassball
  6330.  
  6331. rndtab: ; incbin "randfile"
  6332. endrnd: 
  6333.  
  6334. brightanimtab:
  6335.  dcb.w 200,20
  6336.  dc.w 5
  6337.  dc.w 10,20
  6338.  dc.w 5
  6339.  dcb.w 30,20
  6340.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  6341.  dcb.w 40,0
  6342.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  6343.  dcb.w 300,0
  6344.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  6345.  dc.w -1
  6346.  
  6347. Roompt: dc.l 0
  6348. OldRoompt: dc.l 0
  6349.  
  6350. *****************************************************************
  6351.  *
  6352.  include "AB3:source/LevelData2"
  6353.  *
  6354. *****************************************************************
  6355.  
  6356.  
  6357. wallpt: dc.l 0
  6358. floorpt: dc.l 0
  6359.  
  6360. Rotated:
  6361.  ds.l 800 
  6362. ObjRotated:
  6363.  ds.l 800
  6364.  
  6365. OnScreen:
  6366.  ds.l 800 
  6367.  
  6368. startwait: dc.w 0
  6369. endwait: dc.w 0
  6370.  
  6371. Faces: incbin "faces2raw"
  6372.  
  6373. *******************************************************************
  6374.  
  6375. consttab:
  6376.  incbin "constantfile"
  6377.  
  6378. *******************************************************************
  6379.  
  6380. darkentab: incbin "darkenedcols"
  6381. brightentab: incbin "brightenfile"
  6382. WorkSpace:
  6383.  ds.l 8192 
  6384. waterfile: incbin "waterfile"
  6385.  
  6386.  SECTION ffff,CODE_C
  6387.  
  6388. nullspr: dc.l 0
  6389.  
  6390.  cnop 0,8
  6391. borders:
  6392.  incbin "leftbord"
  6393.  incbin "rightbord"
  6394.  
  6395. health: incbin "healthstrip"
  6396. Ammunition: incbin "ammostrip"
  6397. healthpal: incbin "healthpal"
  6398. PanelKeys: incbin "greenkey"
  6399.  incbin "redkey"
  6400.  incbin "yellowkey"
  6401.  incbin "bluekey"
  6402.  
  6403. null: ds.w 500
  6404. null2: ds.w 500
  6405. null3: ds.w 500
  6406. null4: ds.w 500
  6407.  
  6408.  
  6409. Blurbfield:
  6410.  
  6411.  dc.w bpl1ptl
  6412. bl1l: dc.w 0
  6413.  dc.w bpl1pth
  6414. bl1h: dc.w 0
  6415.  
  6416.  dc.w diwstart,$2c81
  6417.  dc.w diwstop,$1cc1
  6418.  dc.w ddfstart,$38
  6419.  dc.w ddfstop,$b8
  6420.  dc.w bplcon0,$9201
  6421.  dc.w bplcon1,0
  6422.  dc.w $106,$c40
  6423. blcols:
  6424.  dc.w col0,0
  6425.  dc.w col1,$fff
  6426.  
  6427.  dc.w $108,0
  6428.  dc.w $10a,0
  6429.  
  6430.  dc.w $ffff,$fffe
  6431.  dc.w $ffff,$fffe
  6432.  
  6433. nullline:
  6434.  ds.b 80
  6435.  
  6436. bigfield:    
  6437.                 ; Start of our copper list.
  6438.  
  6439.  dc.w dmacon,$8020
  6440.  dc.w intreq,$8011
  6441.  dc.w $1fc,$f
  6442.  dc.w diwstart
  6443. winstart: dc.w $2cb1
  6444.  dc.w diwstop
  6445. winstop: dc.w $2c91
  6446.  dc.w ddfstart
  6447. fetchstart: dc.w $48
  6448.  dc.w ddfstop
  6449. fetchstop: dc.w $88
  6450.  
  6451. bordercols:
  6452.  incbin "borderpal"
  6453.  
  6454.  dc.w spr0ptl
  6455. s0l:
  6456.  dc.w 0
  6457.  dc.w spr0pth
  6458. s0h:
  6459.  dc.w 0
  6460.  dc.w spr1ptl
  6461. s1l:
  6462.  dc.w 0
  6463.  dc.w spr1pth
  6464. s1h:
  6465.  dc.w 0
  6466.  dc.w spr2ptl
  6467. s2l:
  6468.  dc.w 0
  6469.  dc.w spr2pth
  6470. s2h:
  6471.  dc.w 0
  6472.  dc.w spr3ptl
  6473. s3l:
  6474.  dc.w 0
  6475.  dc.w spr3pth
  6476. s3h:
  6477.  dc.w 0
  6478.  dc.w spr4ptl
  6479. s4l:
  6480.  dc.w 0
  6481.  dc.w spr4pth
  6482. s4h:
  6483.  dc.w 0
  6484.  dc.w spr5ptl
  6485. s5l:
  6486.  dc.w 0
  6487.  dc.w spr5pth
  6488. s5h:
  6489.  dc.w 0
  6490.  dc.w spr6ptl
  6491. s6l:
  6492.  dc.w 0
  6493.  dc.w spr6pth
  6494. s6h:
  6495.  dc.w 0
  6496.  dc.w spr7ptl
  6497. s7l:
  6498.  dc.w 0
  6499.  dc.w spr7pth
  6500. s7h:
  6501.  dc.w 0
  6502.  
  6503.  
  6504.  dc.w $106,$c42
  6505.  incbin "borderpal"
  6506.  
  6507.  dc.w $106,$8c42
  6508.  dc.w col0
  6509. hitcol: dc.w $0
  6510.  dc.w $106,$c42
  6511.  dc.w col0
  6512. hitcol2: dc.w 0
  6513.  
  6514.  dc.w bplcon0,$7201
  6515.  dc.w bplcon1
  6516. smoff:
  6517.  dc.w $0
  6518.  
  6519.  dc.w $108
  6520. modulo: dc.w -24
  6521.  dc.w $10a,-24
  6522.  
  6523.  dc.w bpl1pth
  6524. pl1h
  6525.  dc.w 0
  6526.  
  6527.  dc.w bpl1ptl
  6528. pl1l
  6529.  dc.w 0
  6530.  
  6531.  dc.w bpl2pth
  6532. pl2h
  6533.  dc.w 0
  6534.  
  6535.  dc.w bpl2ptl
  6536. pl2l
  6537.  dc.w 0
  6538.  
  6539.  dc.w bpl3pth
  6540. pl3h
  6541.  dc.w 0
  6542.  
  6543.  dc.w bpl3ptl
  6544. pl3l
  6545.  dc.w 0
  6546.  
  6547.  dc.w bpl4pth
  6548. pl4h
  6549.  dc.w 0
  6550.  
  6551.  dc.w bpl4ptl
  6552. pl4l
  6553.  dc.w 0
  6554.  
  6555.  dc.w bpl5pth
  6556. pl5h
  6557.  dc.w 0
  6558.  
  6559.  dc.w bpl5ptl
  6560. pl5l
  6561.  dc.w 0
  6562.  
  6563.  dc.w bpl6pth
  6564. pl6h
  6565.  dc.w 0
  6566.  
  6567.  dc.w bpl6ptl
  6568. pl6l
  6569.  dc.w 0
  6570.  
  6571.  dc.w bpl7pth
  6572. pl7h
  6573.  dc.w 0
  6574.  
  6575.  dc.w bpl7ptl
  6576. pl7l
  6577.  dc.w 0
  6578.  
  6579.  
  6580.  dc.w $1001,$ff00
  6581.  dc.w intreq,$11
  6582. yposcop:
  6583.  dc.w $2a11,$fffe
  6584.  dc.w $8a,0
  6585.  
  6586.  ds.l 104*12
  6587.  
  6588. colbars:
  6589. val SET $2a
  6590.  dcb.l 104*80,$1fe0000
  6591.  dc.w $106,$c42
  6592.  
  6593.  dc.w $80
  6594. pch1:
  6595.  dc.w 0
  6596.  dc.w $82
  6597. pcl1:
  6598.  dc.w 0 
  6599.  dc.w $88,0
  6600.  
  6601.  dc.w $ffff,$fffe       ; End copper list.
  6602.  
  6603.  ds.l 104*12
  6604.  
  6605. colbars2:
  6606. val SET $2a
  6607.  dcb.l 104*80,$1fe0000
  6608.  
  6609.  dc.w $106,$c42
  6610.  
  6611.  dc.w $80
  6612. pch2:
  6613.  dc.w 0
  6614.  dc.w $82
  6615. pcl2:
  6616.  dc.w 0
  6617.  
  6618.  dc.w $88,0
  6619.  
  6620.  dc.w $ffff,$fffe       ; End copper list.
  6621.  
  6622.  ds.l 104*10
  6623.  
  6624. old: dc.l 0
  6625.  
  6626. prot5: dc.w 0
  6627. PanelCop:
  6628.  
  6629.  dc.w $10c,0
  6630.  dc.w bplcon0,$1201
  6631.  dc.w bpl1ptl
  6632. n1l:
  6633.  dc.w 0
  6634.  dc.w bpl1pth
  6635. n1h:
  6636.  dc.w 0
  6637.  dc.w $108,-24
  6638.  incbin "Panelpal"
  6639.  
  6640.  dc.w bpl2pth
  6641. p2h
  6642.  dc.w 0
  6643.  
  6644.  dc.w bpl2ptl
  6645. p2l
  6646.  dc.w 0
  6647.  
  6648.  dc.w bpl3pth
  6649. p3h
  6650.  dc.w 0
  6651.  
  6652.  dc.w bpl3ptl
  6653. p3l
  6654.  dc.w 0
  6655.  
  6656.  dc.w bpl4pth
  6657. p4h
  6658.  dc.w 0
  6659.  dc.w bpl4ptl
  6660. p4l
  6661.  dc.w 0
  6662.  dc.w bpl5pth
  6663. p5h
  6664.  dc.w 0
  6665.  dc.w bpl5ptl
  6666. p5l
  6667.  dc.w 0
  6668.  dc.w bpl6pth
  6669. p6h
  6670.  dc.w 0
  6671.  dc.w bpl6ptl
  6672. p6l
  6673.  dc.w 0
  6674.  dc.w bpl7pth
  6675. p7h
  6676.  dc.w 0
  6677.  dc.w bpl7ptl
  6678. p7l
  6679.  dc.w 0
  6680.  dc.w bpl8pth
  6681. p8h
  6682.  dc.w 0
  6683.  dc.w bpl8ptl
  6684. p8l
  6685.  dc.w 0
  6686.  
  6687.  dc.w $80
  6688. och:
  6689.  dc.w 0
  6690.  dc.w $82
  6691. ocl:
  6692.  dc.w 0
  6693.  
  6694.  dc.w ddfstart,$38
  6695.  dc.w ddfstop,$b8
  6696.  dc.w diwstart,$2c81
  6697.  dc.w diwstop,$2cc1
  6698.  
  6699.  dc.w bplcon0
  6700. Panelcon: dc.w $0211
  6701.  dc.w bpl1pth
  6702. p1h
  6703.  dc.w 0
  6704.  
  6705.  dc.w bpl1ptl
  6706. p1l
  6707.  dc.w 0
  6708.  
  6709.  
  6710.  dc.w $108,40*7
  6711.  dc.w $10a,40*7
  6712.  
  6713.  dc.w $ffff,$fffe
  6714.  
  6715.  dc.w $180,$fff
  6716.  
  6717.  
  6718.  dc.w $f801,$ff00
  6719.  dc.w col1,$50
  6720.  dc.w $f901,$ff00
  6721.  dc.w col1,$90
  6722.  dc.w $fa01,$ff00
  6723.  dc.w col1,$f0
  6724.  dc.w $fb01,$ff00
  6725.  dc.w col1,$f0
  6726.  dc.w $fc01,$ff00
  6727.  dc.w col1,$90
  6728.  dc.w $fd01,$ff00
  6729.  dc.w col1,$50
  6730.  
  6731.  dc.w $fe01,$ff00
  6732.  dc.w col1,$fff
  6733.  
  6734.  dc.w $ffdf,$fffe
  6735.  dc.w $a01,$ff00
  6736.  dc.w bplcon0,$201
  6737.  
  6738.  incbin "faces2cols"
  6739.  dc.w bpl1pth
  6740. f1h
  6741.  dc.w 0
  6742.  
  6743.  dc.w bpl1ptl
  6744. f1l
  6745.  dc.w 0
  6746.  
  6747.  dc.w bpl2pth
  6748. f2h
  6749.  dc.w 0
  6750.  
  6751.  dc.w bpl2ptl
  6752. f2l
  6753.  dc.w 0
  6754.  
  6755.  dc.w bpl3pth
  6756. f3h
  6757.  dc.w 0
  6758.  
  6759.  dc.w bpl3ptl
  6760. f3l
  6761.  dc.w 0
  6762.  
  6763.  dc.w bpl4pth
  6764. f4h
  6765.  dc.w 0
  6766.  dc.w bpl4ptl
  6767. f4l
  6768.  dc.w 0
  6769.  
  6770.  dc.w bpl5pth
  6771. f5h
  6772.  dc.w 0
  6773.  dc.w bpl5ptl
  6774. f5l
  6775.  dc.w 0
  6776.  
  6777.  dc.w $0c01,$ff00
  6778.  dc.w bplcon0,$5201
  6779.   
  6780.  dc.w $ffff,$fffe
  6781.  
  6782.  cnop 0,64
  6783. FacePlace:
  6784.  ds.l 6*32*5
  6785.  
  6786.  
  6787.  
  6788. ********************************************
  6789. * Stuff you don't have to worry about yet. *
  6790. ********************************************
  6791.  
  6792. closeeverything:
  6793.  
  6794.  jsr mt_end
  6795.  
  6796.  move.l #$dff000,a6
  6797.  move.l old,$dff080     ; Restore old copper list.
  6798.  move.l old,d0
  6799.  move.w d0,ocl
  6800.  swap d0
  6801.  move.w d0,och
  6802.  move.w #$8020,dmacon(a6)
  6803.  move.w #$f,dmacon(a6)
  6804.  move.l saveit,$6c.w
  6805.  move.l OLDKINT,$68.w
  6806.  move.w saveinters,d0
  6807.  or.w #$c000,d0
  6808.  move.w d0,intena(a6)
  6809.  clr.w $dff0a8
  6810.  clr.w $dff0b8
  6811.  clr.w $dff0c8
  6812.  clr.w $dff0d8
  6813.  
  6814. ; move.w #3,d0
  6815. ;nonewvbl
  6816. ; btst #5,intreqrl(a6)
  6817. ; beq.s nonewvbl
  6818. ; move.w #$20,intreq(a6)
  6819. ; dbra d0,nonewvbl
  6820.  
  6821. ; move.l oldview,a1
  6822. ; move.l a1,d0
  6823. ; move.l gfxbase,a6
  6824. ; jsr -$de(a6)
  6825.  
  6826.  
  6827. ; cmp.b #'t',option+1
  6828. ; bra.s leaveold
  6829.  move.w #$f8e,$dff1dc
  6830. ;leaveold:
  6831.  
  6832.  rte
  6833.  
  6834. intbase: dc.l 0
  6835. gfxbase: dc.l 0
  6836. oldview: dc.l 0
  6837.  
  6838. stuff:
  6839.  
  6840.     Lea    gfxname(pc),a1    
  6841.     Moveq.l    #0,d0
  6842.     Move.l    $4.w,a6    
  6843.     Jsr    -$228(a6)
  6844.     Move.l     d0,gfxbase
  6845.     Move.l    d0,a6                Use As Base Reg
  6846.     Move.l    34(a6),oldview
  6847.     move.l 38(a6),old
  6848.  
  6849.  jmp endstuff
  6850.  
  6851. gfxname dc.b "graphics.library",0
  6852.  even
  6853. INTUNAME    dc.b    "intuition.library",0
  6854.  
  6855.  even
  6856.  
  6857.  
  6858.  cnop 0,64
  6859.  
  6860. Panel:
  6861.  incbin "PanelRaw"
  6862.  
  6863. TimerScr: ds.b 40*64
  6864.  
  6865. scrntab:
  6866.  ds.b 16
  6867. val SET 32
  6868.  REPT 96
  6869.  dc.b val,val,val
  6870. val SET val+1
  6871.  ENDR
  6872.  ds.b 16
  6873.  
  6874.  cnop 0,64
  6875. scrn:
  6876.  
  6877.  dcb.l 8,$33333333
  6878.  dc.l 0
  6879.  dc.l 0
  6880.  
  6881.  dcb.l 8,$0f0f0f0f
  6882.  dc.l 0
  6883.  dc.l 0
  6884.  
  6885.  dcb.l 8,$00ff00ff
  6886.  dc.l 0
  6887.  dc.l 0
  6888.  
  6889.  dcb.l 8,$0000ffff
  6890.  dc.l 0
  6891.  dc.l 0
  6892.  
  6893.  dc.l 0,-1,0,-1,0,-1,0,-1
  6894.  dc.l 0
  6895.  dc.l 0
  6896.  
  6897.  dc.l -1,-1,0,0,-1,-1,0,0
  6898.  dc.l 0
  6899.  dc.l 0
  6900.  
  6901.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  6902.  dc.l 0
  6903.  dc.l 0
  6904.  
  6905. NumTimes: dc.l 0
  6906. TimeCount: dc.l 0
  6907. oldtime: dc.l 0
  6908. counting: dc.b 0
  6909. oktodisplay: dc.b 0
  6910.  
  6911. INITTIMER:
  6912.  move.l #0,TimeCount
  6913.  move.l #0,NumTimes
  6914.  rts
  6915.  
  6916. STARTCOUNT:
  6917.  move.l d0,-(a7)
  6918.  move.l $dff004,d0
  6919.  and.l #$1ffff,d0
  6920.  move.l d0,oldtime
  6921.  st counting
  6922.  move.l (a7)+,d0
  6923.  rts
  6924.  
  6925. STOPCOUNT:
  6926.  move.l d0,-(a7)
  6927.  move.l $dff004,d0
  6928.  and.l #$1ffff,d0
  6929.  
  6930.  sub.l oldtime,d0
  6931.  cmp.l #-256,d0
  6932.  bge.s okcount
  6933.  add.l #313*256,d0
  6934. okcount:
  6935.  add.l d0,TimeCount
  6936.  addq.l #1,NumTimes
  6937.  clr.b counting
  6938.  move.l (a7)+,d0
  6939.  rts
  6940.  
  6941. STOPCOUNTNOADD:
  6942.  move.l d0,-(a7)
  6943.  move.l $dff004,d0
  6944.  and.l #$1ffff,d0
  6945.  
  6946.  sub.l oldtime,d0
  6947.  cmp.l #-256,d0
  6948.  bge.s okcount2
  6949.  add.l #313*256,d0
  6950. okcount2:
  6951.  add.l d0,TimeCount
  6952.  clr.b counting
  6953.  move.l (a7)+,d0
  6954.  rts
  6955.  
  6956. maxbot: dc.w 0
  6957. tstneg: dc.l 0
  6958.  
  6959. STOPTIMER:
  6960.  st oktodisplay
  6961.  rts
  6962.  
  6963. digits: incbin "numbers.inc"
  6964.  
  6965.  
  6966.  Section Sounds,CODE
  6967.  
  6968. Scream: incbin "ab3:sounds/Scream"
  6969.  ds.w 100
  6970. EndScream:
  6971. LowScream: incbin "ab3:sounds/LowScream"
  6972.  ds.w 100
  6973. EndLowScream:
  6974. BaddieGun: incbin "ab3:sounds/BaddieGun"
  6975. EndBaddieGun:
  6976. bass: incbin "ab3:sounds/backbass+drum"
  6977. bassend:
  6978. Shoot: incbin "ab3:sounds/fire!"
  6979. EndShoot:
  6980. Munch: incbin "ab3:sounds/munch"
  6981. EndMunch:
  6982. PooGun: incbin "ab3:sounds/shoot.dm"
  6983. EndPooGun:
  6984. Collect: incbin "ab3:sounds/collect"
  6985. EndCollect:
  6986. DoorNoise: incbin "ab3:sounds/newdoor"
  6987. EndDoorNoise:
  6988. Stomp: incbin "ab3:sounds/footstep3"
  6989. EndStomp:
  6990. SwitchNoise: incbin "ab3:sounds/switch"
  6991. EndSwitch:
  6992. Reload: incbin "ab3:sounds/switch1.SFX"
  6993. EndReload:
  6994. NoAmmo: incbin "ab3:sounds/noammo"
  6995. EndNoAmmo:
  6996. Splotch: incbin "ab3:sounds/splotch"
  6997. EndSplotch:
  6998. SplatPop: incbin "ab3:sounds/splatpop"
  6999. EndSplatPop:
  7000. Boom: incbin "ab3:sounds/boom"
  7001. EndBoom:
  7002. Hiss: incbin "ab3:sounds/newhiss"
  7003. EndHiss:
  7004. Howl1: incbin "ab3:sounds/howl1"
  7005. EndHowl1:
  7006. Howl2: incbin "ab3:sounds/howl2"
  7007. EndHowl2:
  7008. Pant: incbin "ab3:sounds/pant"
  7009. EndPant:
  7010. Whoosh: incbin "ab3:sounds/whoosh"
  7011. EndWhoosh:
  7012.  SECTION music,code_c
  7013.  
  7014. UseAllChannels: dc.w 0
  7015.  
  7016. mt_init:move.l    mt_data,a0
  7017.     move.l    a0,a1
  7018.     add.l    #$3b8,a1
  7019.     moveq    #$7f,d0
  7020.     moveq    #0,d1
  7021. mt_loop:move.l    d1,d2
  7022.     subq.w    #1,d0
  7023. mt_lop2:move.b    (a1)+,d1
  7024.     cmp.b    d2,d1
  7025.     bgt.s    mt_loop
  7026.     dbf    d0,mt_lop2
  7027.     addq.b    #1,d2
  7028.  
  7029.     lea    mt_samplestarts(pc),a1
  7030.     asl.l    #8,d2
  7031.     asl.l    #2,d2
  7032.     add.l    #$43c,d2
  7033.     add.l    a0,d2
  7034.     move.l    d2,a2
  7035.     moveq    #$1e,d0
  7036. mt_lop3:clr.l    (a2)
  7037.     move.l    a2,(a1)+
  7038.     moveq    #0,d1
  7039.     move.w    42(a0),d1
  7040.     asl.l    #1,d1
  7041.     add.l    d1,a2
  7042.     add.l    #$1e,a0
  7043.     dbf    d0,mt_lop3
  7044.  
  7045.     or.b    #$2,$bfe001
  7046.     move.b    #$6,mt_speed
  7047.     clr.w    $dff0a8
  7048.     clr.w    $dff0b8
  7049.     clr.w    $dff0c8
  7050.     clr.w    $dff0d8
  7051.     clr.b    mt_songpos
  7052.     clr.b    mt_counter
  7053.     clr.w    mt_pattpos
  7054.     rts
  7055.  
  7056. mt_end:    clr.w    $dff0a8
  7057.     clr.w    $dff0b8
  7058.     clr.w    $dff0c8
  7059.     clr.w    $dff0d8
  7060.     move.w    #$f,$dff096
  7061.     rts
  7062.  
  7063. mt_music:
  7064.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  7065.     move.l    mt_data,a0
  7066.     addq.b    #$1,mt_counter
  7067.     move.b    mt_counter,D0
  7068.     cmp.b    mt_speed,D0
  7069.     blt.s    mt_nonew
  7070.     clr.b    mt_counter
  7071.     bra    mt_getnew
  7072.  
  7073. mt_nonew:
  7074.     lea    mt_voice1(pc),a6
  7075.     lea    $dff0a0,a5
  7076.     bsr    mt_checkcom
  7077.     lea    mt_voice2(pc),a6
  7078.     lea    $dff0b0,a5
  7079.     bsr    mt_checkcom
  7080.     tst.b UseAllChannels
  7081.     beq mt_endr
  7082.      lea    mt_voice3(pc),a6
  7083.     lea    $dff0c0,a5
  7084.     bsr    mt_checkcom
  7085.     lea    mt_voice4(pc),a6
  7086.     lea    $dff0d0,a5
  7087.     bsr    mt_checkcom
  7088.     bra    mt_endr
  7089.  
  7090. mt_arpeggio:
  7091.     moveq    #0,d0
  7092.     move.b    mt_counter,d0
  7093.     divs    #$3,d0
  7094.     swap    d0
  7095.     cmp.w    #$0,d0
  7096.     beq.s    mt_arp2
  7097.     cmp.w    #$2,d0
  7098.     beq.s    mt_arp1
  7099.  
  7100.     moveq    #0,d0
  7101.     move.b    $3(a6),d0
  7102.     lsr.b    #4,d0
  7103.     bra.s    mt_arp3
  7104. mt_arp1:moveq    #0,d0
  7105.     move.b    $3(a6),d0
  7106.     and.b    #$f,d0
  7107.     bra.s    mt_arp3
  7108. mt_arp2:move.w    $10(a6),d2
  7109.     bra.s    mt_arp4
  7110. mt_arp3:asl.w    #1,d0
  7111.     moveq    #0,d1
  7112.     move.w    $10(a6),d1
  7113.     lea    mt_periods(pc),a0
  7114.     moveq    #$24,d7
  7115. mt_arploop:
  7116.     move.w    (a0,d0.w),d2
  7117.     cmp.w    (a0),d1
  7118.     bge.s    mt_arp4
  7119.     addq.l    #2,a0
  7120.     dbf    d7,mt_arploop
  7121.     rts
  7122. mt_arp4:move.w    d2,$6(a5)
  7123.     rts
  7124.  
  7125. mt_getnew:
  7126.     move.l    mt_data,a0
  7127.     move.l    a0,a3
  7128.     move.l    a0,a2
  7129.     add.l    #$c,a3
  7130.     add.l    #$3b8,a2
  7131.     add.l    #$43c,a0
  7132.  
  7133.     moveq    #0,d0
  7134.     move.l    d0,d1
  7135.     move.b    mt_songpos,d0
  7136.     move.b    (a2,d0.w),d1
  7137.     asl.l    #8,d1
  7138.     asl.l    #2,d1
  7139.     add.w    mt_pattpos,d1
  7140.     clr.w    mt_dmacon
  7141.  
  7142.     lea    $dff0a0,a5
  7143.     lea    mt_voice1(pc),a6
  7144.     bsr.s    mt_playvoice
  7145.     lea    $dff0b0,a5
  7146.     lea    mt_voice2(pc),a6
  7147.     bsr.s    mt_playvoice
  7148.     tst.b UseAllChannels
  7149.     beq mt_setdma
  7150.     lea    $dff0c0,a5
  7151.     lea    mt_voice3(pc),a6
  7152.     bsr.s    mt_playvoice
  7153.     lea    $dff0d0,a5
  7154.     lea    mt_voice4(pc),a6
  7155.     bsr.s    mt_playvoice
  7156.     bra    mt_setdma
  7157.  
  7158. mt_playvoice:
  7159.     move.l    (a0,d1.l),(a6)
  7160.     addq.l    #4,d1
  7161.     moveq    #0,d2
  7162.     move.b    $2(a6),d2
  7163.     and.b    #$f0,d2
  7164.     lsr.b    #4,d2
  7165.     move.b    (a6),d0
  7166.     and.b    #$f0,d0
  7167.     or.b    d0,d2
  7168.     tst.b    d2
  7169.     beq.s    mt_setregs
  7170.     moveq    #0,d3
  7171.     lea    mt_samplestarts(pc),a1
  7172.     move.l    d2,d4
  7173.     subq.l    #$1,d2
  7174.     asl.l    #2,d2
  7175.     mulu    #$1e,d4
  7176.     move.l    (a1,d2.l),$4(a6)
  7177.     move.w    (a3,d4.l),$8(a6)
  7178.     move.w    $2(a3,d4.l),$12(a6)
  7179.     move.w    $4(a3,d4.l),d3
  7180.     tst.w    d3
  7181.     beq.s    mt_noloop
  7182.     move.l    $4(a6),d2
  7183.     asl.w    #1,d3
  7184.     add.l    d3,d2
  7185.     move.l    d2,$a(a6)
  7186.     move.w    $4(a3,d4.l),d0
  7187.     add.w    $6(a3,d4.l),d0
  7188.     move.w    d0,8(a6)
  7189.     move.w    $6(a3,d4.l),$e(a6)
  7190.     move.w    $12(a6),d0
  7191.     asr.w #2,d0
  7192.     move.w d0,$8(a5)
  7193.     bra.s    mt_setregs
  7194. mt_noloop:
  7195.     move.l    $4(a6),d2
  7196.     add.l    d3,d2
  7197.     move.l    d2,$a(a6)
  7198.     move.w    $6(a3,d4.l),$e(a6)
  7199.     move.w    $12(a6),d0
  7200.     asr.w #2,d0
  7201.     move.w d0,$8(a5)
  7202. mt_setregs:
  7203.     move.w    (a6),d0
  7204.     and.w    #$fff,d0
  7205.     beq    mt_checkcom2
  7206.     move.b    $2(a6),d0
  7207.     and.b    #$F,d0
  7208.     cmp.b    #$3,d0
  7209.     bne.s    mt_setperiod
  7210.     bsr    mt_setmyport
  7211.     bra    mt_checkcom2
  7212. mt_setperiod:
  7213.     move.w    (a6),$10(a6)
  7214.     and.w    #$fff,$10(a6)
  7215.     move.w    $14(a6),d0
  7216.     move.w    d0,$dff096
  7217.     clr.b    $1b(a6)
  7218.  
  7219.     move.l    $4(a6),(a5)
  7220.     move.w    $8(a6),$4(a5)
  7221.     move.w    $10(a6),d0
  7222.     and.w    #$fff,d0
  7223.     move.w    d0,$6(a5)
  7224.     move.w    $14(a6),d0
  7225.     or.w    d0,mt_dmacon
  7226.     bra    mt_checkcom2
  7227.  
  7228. mt_setdma:
  7229.      move.w #250,d0
  7230. mt_wait:
  7231.      add.w #1,testchip
  7232.      dbra d0,mt_wait
  7233.     move.w    mt_dmacon,d0
  7234.     or.w    #$8000,d0
  7235.     and.w #%1111111111110011,d0
  7236.     move.w    d0,$dff096
  7237.     move.w #250,d0
  7238. mt_wait2:
  7239.     add.w #1,testchip
  7240.     dbra    d0,mt_wait2
  7241.     lea    $dff000,a5
  7242.     tst.b UseAllChannels
  7243.     beq.s noall
  7244.     lea    mt_voice4(pc),a6
  7245.     move.l    $a(a6),$d0(a5)
  7246.     move.w    $e(a6),$d4(a5)
  7247.     lea    mt_voice3(pc),a6
  7248.     move.l    $a(a6),$c0(a5)
  7249.     move.w    $e(a6),$c4(a5)
  7250. noall:
  7251.     lea    mt_voice2(pc),a6
  7252.     move.l    $a(a6),$b0(a5)
  7253.     move.w    $e(a6),$b4(a5)
  7254.     lea    mt_voice1(pc),a6
  7255.     move.l    $a(a6),$a0(a5)
  7256.     move.w    $e(a6),$a4(a5)
  7257.  
  7258.     add.w    #$10,mt_pattpos
  7259.     cmp.w    #$400,mt_pattpos
  7260.     bne.s    mt_endr
  7261. mt_nex:    clr.w    mt_pattpos
  7262.     clr.b    mt_break
  7263.     addq.b    #1,mt_songpos
  7264.     and.b    #$7f,mt_songpos
  7265.     move.b    mt_songpos,d1
  7266. ;    cmp.b    mt_data+$3b6,d1
  7267. ;    bne.s    mt_endr
  7268. ;    move.b    mt_data+$3b7,mt_songpos
  7269. mt_endr:tst.b    mt_break
  7270.     bne.s    mt_nex
  7271.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  7272.     rts
  7273.  
  7274. mt_setmyport:
  7275.     move.w    (a6),d2
  7276.     and.w    #$fff,d2
  7277.     move.w    d2,$18(a6)
  7278.     move.w    $10(a6),d0
  7279.     clr.b    $16(a6)
  7280.     cmp.w    d0,d2
  7281.     beq.s    mt_clrport
  7282.     bge.s    mt_rt
  7283.     move.b    #$1,$16(a6)
  7284.     rts
  7285. mt_clrport:
  7286.     clr.w    $18(a6)
  7287. mt_rt:    rts
  7288.  
  7289. CODESTORE: dc.l 0
  7290.  
  7291. mt_myport:
  7292.     move.b    $3(a6),d0
  7293.     beq.s    mt_myslide
  7294.     move.b    d0,$17(a6)
  7295.     clr.b    $3(a6)
  7296. mt_myslide:
  7297.     tst.w    $18(a6)
  7298.     beq.s    mt_rt
  7299.     moveq    #0,d0
  7300.     move.b    $17(a6),d0
  7301.     tst.b    $16(a6)
  7302.     bne.s    mt_mysub
  7303.     add.w    d0,$10(a6)
  7304.     move.w    $18(a6),d0
  7305.     cmp.w    $10(a6),d0
  7306.     bgt.s    mt_myok
  7307.     move.w    $18(a6),$10(a6)
  7308.     clr.w    $18(a6)
  7309. mt_myok:move.w    $10(a6),$6(a5)
  7310.     rts
  7311. mt_mysub:
  7312.     sub.w    d0,$10(a6)
  7313.     move.w    $18(a6),d0
  7314.     cmp.w    $10(a6),d0
  7315.     blt.s    mt_myok
  7316.     move.w    $18(a6),$10(a6)
  7317.     clr.w    $18(a6)
  7318.     move.w    $10(a6),$6(a5)
  7319.     rts
  7320.  
  7321. mt_vib:    move.b    $3(a6),d0
  7322.     beq.s    mt_vi
  7323.     move.b    d0,$1a(a6)
  7324.  
  7325. mt_vi:    move.b    $1b(a6),d0
  7326.     lea    mt_sin(pc),a4
  7327.     lsr.w    #$2,d0
  7328.     and.w    #$1f,d0
  7329.     moveq    #0,d2
  7330.     move.b    (a4,d0.w),d2
  7331.     move.b    $1a(a6),d0
  7332.     and.w    #$f,d0
  7333.     mulu    d0,d2
  7334.     lsr.w    #$6,d2
  7335.     move.w    $10(a6),d0
  7336.     tst.b    $1b(a6)
  7337.     bmi.s    mt_vibmin
  7338.     add.w    d2,d0
  7339.     bra.s    mt_vib2
  7340. mt_vibmin:
  7341.     sub.w    d2,d0
  7342. mt_vib2:move.w    d0,$6(a5)
  7343.     move.b    $1a(a6),d0
  7344.     lsr.w    #$2,d0
  7345.     and.w    #$3c,d0
  7346.     add.b    d0,$1b(a6)
  7347.     rts
  7348.  
  7349. mt_nop:    move.w    $10(a6),$6(a5)
  7350.     rts
  7351.  
  7352.  
  7353. mt_checkcom:
  7354.     move.w    $2(a6),d0
  7355.     and.w    #$fff,d0
  7356.     beq.s    mt_nop
  7357.     move.b    $2(a6),d0
  7358.     and.b    #$f,d0
  7359.     tst.b    d0
  7360.     beq    mt_arpeggio
  7361.     cmp.b    #$1,d0
  7362.     beq.s    mt_portup
  7363.     cmp.b    #$2,d0
  7364.     beq    mt_portdown
  7365.     cmp.b    #$3,d0
  7366.     beq    mt_myport
  7367.     cmp.b    #$4,d0
  7368.     beq    mt_vib
  7369.     move.w    $10(a6),$6(a5)
  7370.     cmp.b    #$a,d0
  7371.     beq.s    mt_volslide
  7372.     rts
  7373.  
  7374. mt_volslide:
  7375.     moveq    #0,d0
  7376.     move.b    $3(a6),d0
  7377.     lsr.b    #4,d0
  7378.     tst.b    d0
  7379.     beq.s    mt_voldown
  7380.     add.w    d0,$12(a6)
  7381.     cmp.w    #$40,$12(a6)
  7382.     bmi.s    mt_vol2
  7383.     move.w    #$40,$12(a6)
  7384. mt_vol2:move.w    $12(a6),d0
  7385.     asr.w #2,d0
  7386.     move.w d0,$8(a5)
  7387.     rts
  7388.  
  7389. mt_voldown:
  7390.     moveq    #0,d0
  7391.     move.b    $3(a6),d0
  7392.     and.b    #$f,d0
  7393.     sub.w    d0,$12(a6)
  7394.     bpl.s    mt_vol3
  7395.     clr.w    $12(a6)
  7396. mt_vol3:move.w    $12(a6),d0
  7397.     asr.w #2,d0
  7398.     move.w d0,$8(a5)
  7399.     rts
  7400.  
  7401. mt_portup:
  7402.     moveq    #0,d0
  7403.     move.b    $3(a6),d0
  7404.     sub.w    d0,$10(a6)
  7405.     move.w    $10(a6),d0
  7406.     and.w    #$fff,d0
  7407.     cmp.w    #$71,d0
  7408.     bpl.s    mt_por2
  7409.     and.w    #$f000,$10(a6)
  7410.     or.w    #$71,$10(a6)
  7411. mt_por2:move.w    $10(a6),d0
  7412.     and.w    #$fff,d0
  7413.     move.w    d0,$6(a5)
  7414.     rts
  7415.  
  7416. mt_portdown:
  7417.     clr.w    d0
  7418.     move.b    $3(a6),d0
  7419.     add.w    d0,$10(a6)
  7420.     move.w    $10(a6),d0
  7421.     and.w    #$fff,d0
  7422.     cmp.w    #$358,d0
  7423.     bmi.s    mt_por3
  7424.     and.w    #$f000,$10(a6)
  7425.     or.w    #$358,$10(a6)
  7426. mt_por3:move.w    $10(a6),d0
  7427.     and.w    #$fff,d0
  7428.     move.w    d0,$6(a5)
  7429.     rts
  7430.  
  7431. mt_checkcom2:
  7432.     move.b    $2(a6),d0
  7433.     and.b    #$f,d0
  7434.     cmp.b    #$e,d0
  7435.     beq.s    mt_setfilt
  7436.     cmp.b    #$d,d0
  7437.     beq.s    mt_pattbreak
  7438.     cmp.b    #$b,d0
  7439.     beq.s    mt_posjmp
  7440.     cmp.b    #$c,d0
  7441.     beq.s    mt_setvol
  7442.     cmp.b    #$f,d0
  7443.     beq.s    mt_setspeed
  7444.     rts
  7445.  
  7446. mt_setfilt:
  7447.     move.b    $3(a6),d0
  7448.     and.b    #$1,d0
  7449.     asl.b    #$1,d0
  7450.     and.b    #$fd,$bfe001
  7451.     or.b    d0,$bfe001
  7452.     rts
  7453. mt_pattbreak:
  7454.     not.b    mt_break
  7455.     rts
  7456. mt_posjmp:
  7457.     st reachedend
  7458.     move.b    $3(a6),d0
  7459.     subq.b    #$1,d0
  7460.     move.b    d0,mt_songpos
  7461.     not.b    mt_break
  7462.     rts
  7463. mt_setvol:
  7464.     cmp.b    #$40,$3(a6)
  7465.     ble.s    mt_vol4
  7466.     move.b    #$40,$3(a6)
  7467. mt_vol4:move.b    $3(a6),d0
  7468.     asr.w #2,d0
  7469.     move.w d0,$8(a5)
  7470.     rts
  7471. mt_setspeed:
  7472.     cmp.b    #$1f,$3(a6)
  7473.     ble.s    mt_sets
  7474.     move.b    #$1f,$3(a6)
  7475. mt_sets:move.b    $3(a6),d0
  7476.     beq.s    mt_rts2
  7477.     move.b    d0,mt_speed
  7478.     clr.b    mt_counter
  7479. mt_rts2:rts
  7480.  
  7481. mt_sin:
  7482.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  7483.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  7484.  
  7485. mt_periods:
  7486.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  7487.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  7488.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  7489.  DC.w $007f,$0078,$0071,$0000,$0000
  7490.  
  7491. reachedend: dc.b 0
  7492. mt_speed:    DC.b    6
  7493. mt_songpos:    DC.b    0
  7494. mt_pattpos:    DC.w    0
  7495. mt_counter:    DC.b    0
  7496.  
  7497. mt_break:    DC.b    0
  7498. mt_dmacon:    DC.w    0
  7499. mt_samplestarts:DS.L    $1f
  7500. mt_voice1:    DS.w    10
  7501.         DC.w    1
  7502.         DS.w    3
  7503. mt_voice2:    DS.w    10
  7504.         DC.w    2
  7505.         DS.w    3
  7506. mt_voice3:    DS.w    10
  7507.         DC.w    4
  7508.         DS.w    3
  7509. mt_voice4:    DS.w    10
  7510.         DC.w    8
  7511.         DS.w    3
  7512.  
  7513. testchip: dc.w 0
  7514.  
  7515. ;/* End of File */
  7516. mt_data: dc.l 0
  7517. tstchip: dc.l 0
  7518.  
  7519. ingame:
  7520. ; incbin "ab3:includes/ingame"
  7521. gameover: incbin "ab3:includes/gameover"
  7522. welldone: incbin "ab3:includes/welldone"
  7523.